ASP.NET MVC删除视图 - 如何工作

tom*_*tom 3 c# asp.net-mvc webforms

这是一个简单的代码简单的问题,我只想详细说明我的理解.

ASP.NET MVC应用程序的标准生成视图将具有删除视图,其结尾如下所示 -

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    <p>
        <input type="submit" value="Delete" /> |
        @Html.ActionLink("Back to List", "Index")
    </p>
}
Run Code Online (Sandbox Code Playgroud)

控制器方法是标准的 -

  public ActionResult Delete(int addressID)
    {
        Address address = db.Address.Find(addressID);
        if (address == null)
        {
            return HttpNotFound();
        }
        return View(address);
    }

    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int addressID)
    {
        Address address = db.Address.Find(addressID);
        db.Address.Remove(address);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
Run Code Online (Sandbox Code Playgroud)

这产生的HTML看起来像 -

<form action="/Address/Delete?AddressID=2" method="post">    
<input name="__RequestVerificationToken" type="hidden" value="...snip..." />    <p>
        <input type="submit" value="Delete" /> |
        <a href="/Address">Back to List</a>
    </p>
</form>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,AddressID包含在表单操作中,但我没有"做"任何事情将其放在那里.我刚送了包模型.

AddressID如何进入表单操作?

JnJ*_*Boo 5

这是由于您的方法签名导致的自动映射和asp.net路由.

public ActionResult Delete(int addressID)
public ActionResult DeleteConfirmed(int addressID)
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅ASP.NET MVC应用程序中控制器和操作方法自动映射操作 - 方法参数部分 以及有关路由ASP.NET路由的详细信息