【问题标题】:Bind a button to an action in controller and pass model from view to controller in MVC将按钮绑定到控制器中的操作并将模型从视图传递到 MVC 中的控制器
【发布时间】:2015-06-23 22:51:21
【问题描述】:

我正在尝试使用 jQuery AJAX 将按钮绑定到控制器中的操作。我是这样做的,但它不起作用。

@model InventoryTest.MyModel

@using (Html.BeginForm(new { id = "itemTypeForm" }))
{
    <input type="submit" value="Delete" id="deleteButton"  class="button btn btn-danger" />

    <!-- other form elements... -->
}

在控制器中我有:

[HttpPost]
public ActionResult Delete(MyModel myModel )
{
    if (myModel != null);
        // do something...

    return(view);
}

AJAX 代码是:

$("#deleteButton").on('click', function (e) {
    e.preventDefault();
    if (formIsValid) {
        $.ajax({
            url: '/Home/Delete',
            type: 'POST',
            data: form.serialize()
        }).done(function (data) {
            if (data.success) {
                alert("sucsess")
            } else {
               alert("error");
            }
        });
    }
})

编辑:

$("#deleteButton").on('click', function (e) {
        e.preventDefault();
        $.ajax({
            url: '/Home/Delete',
            type: 'POST',
            **data:$("#itemTypeForm").serialize()**
        }).done(function (data) {
            if (data.success) {
                alert("sucsess")
            } else {
                alert("error");
            }
        });
    })

我更改了 AJAX 部分以使用其 id 访问表单,它现在调用操作但我收到错误消息并且返回的模型对象为空。

【问题讨论】:

  • formformIsValid 来自哪里?此外,动作中的if 条件后面不应有;
  • 你能指定什么不工作吗?有什么错误吗?
  • @Rory McCrossan :Actullay 我是 ajax 新手,所以我只是在尝试一些代码的地方,我认为表单是包含输入按钮的表单。
  • @ssilas777:不,没有错误,但在我单击删除按钮后它也不会调用控制器中的操作
  • @RoryMcCrossan:dat 的正确值在哪里?或者我如何访问该按钮所在的表单?

标签: jquery ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:

您应该将当前 ID 包装在名称必须匹配的隐藏元素中。

说出你在 Model 中的删除 id 名称是-ProjectID

那么-

@using (Html.BeginForm(new { id = "itemTypeForm" }))
{
    @Html.HiddenFor(m=>m.ProjectID) //getting from above model
    <input type="submit" value="Delete" id="deleteButton"  class="button btn btn-danger" />

    <!-- other form elements... -->
}

然后-

[HttpPost]
public ActionResult Delete(MyModel myModel )
{
    int projectID = myModel.ProjectID  //just to make sure if id is coming
    if (myModel != null);
        // do something...

    return(view);
}

这样你就可以让它工作了。

【讨论】:

    【解决方案2】:

    首先你应该返回 Json,而不是视图。

    在您的 Ajax 调用中,将预期的数据类型也设置为 Json。

    "basic ajax tutorial"

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2016-07-24
      相关资源
      最近更新 更多