4

これは単純なコードを使用した単純な質問です。理解できるように冗長にしたかっただけです。

ASP.NET MVC アプリケーション用に生成された標準のビューには、以下のように終了する削除ビューがあります -

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

コントローラのメソッドは標準です -

  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");
    }

これが生成する 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>

ご覧のとおり、AddressID はフォーム アクションに含まれていますが、そこに配置するために何も「実行」していません。モデルを梱包して送りました。

AddressID はどのようにフォーム アクションに取り込まれますか?

4

2 に答える 2

5

これは、メソッド シグネチャに起因する自動マッピングと asp.net ルーティングによるものです。

public ActionResult Delete(int addressID)
public ActionResult DeleteConfirmed(int addressID)

詳細については、「ASP.NET MVC アプリケーションのコントローラーとアクション メソッド」の「アクション メソッド パラメーターの自動マッピング」セクションと、 ASP.NET ルーティングのルーティング の詳細を参照してください。

于 2013-10-04T17:02:49.283 に答える
2

MVC は非常に「慣例に基づいています」。

必要な情報を提供しました。両方の削除アクションに同じ id パラメータがあります。

 public ActionResult Delete(int addressID)
于 2013-10-04T16:33:50.260 に答える