如何在ASP.NET MVC中处理同一表单上的编辑和删除按钮?

Mik*_*oud 12 .net c# asp.net asp.net-mvc

考虑以下标记:

<h2>Edit SAS Program</h2>
@using (Html.BeginForm("Edit", "SasProgram", FormMethod.Post))
{
    <label for="Name">Name</label>
    @Html.TextBoxFor(model => model.Name)

    using (Html.BeginForm("Delete", "SasProgram", FormMethod.Post))
    {
        <input type="submit" class="button" value="Delete" />
    }
    <input type="submit" class="button" value="Save Changes" />
}
Run Code Online (Sandbox Code Playgroud)

我想把Delete按钮放在与...相同的视图上Edit.但是,它不会让我有嵌套的表单.处理这种情况的适当方法是什么?

我尝试利用这个答案,如何处理ASP.NET MVC中的嵌套表单,但现在它已经是一个断开的链接.

nro*_*dic 16

我会以相同的形式为按钮名称使用不同的值:

@using (Html.BeginForm("Edit", "SasProgram", FormMethod.Post))
{
    <label for="Name">Name</label>
    @Html.TextBoxFor(model => model.Name)

    <button name="action" value="delete">Delete</button>
    <button name="action" value="save">Save Changes</button>
}
Run Code Online (Sandbox Code Playgroud)

然后切换控制器:

[HttpPost]
public ActionResult Edit( SomeModel model, string action )
{
    switch( action ) {
        case "delete":
            // delete action
            break;
        case "save":
            // save action
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

代码是从内存中编写的,但它可以在生产中使用.请注意,按钮是默认类型 - 提交.


Kri*_*aes 14

最好和最简单的方法是使用两种形式但不嵌套它们:

<h2>Edit SAS Program</h2>
@using (Html.BeginForm("Edit", "SasProgram", FormMethod.Post))
{
    <label for="Name">Name</label>
    @Html.TextBoxFor(model => model.Name)

    <input type="submit" class="button" value="Save Changes" />
}

@using (Html.BeginForm("Delete", "SasProgram", FormMethod.Post))
{
    <input type="submit" class="button" value="Delete" />
}
Run Code Online (Sandbox Code Playgroud)

这样你就有:

  • 两种不同的形式
  • 没有GET请求
  • 编辑按钮下方的删除按钮,当您在允许编辑某些内容的视图上时更有意义.