1

私が現在取り組んでいるプロジェクトで奇妙なことが起こり始めました。私はすでに簡単で便利な回避策を見つけましたが、完全な回帰テストが必要になるため、大量の既存のコードに触れるという考えは好きではありません。そのため、問題を再現する小さなアプリを作成しましたが、それでも再現できました。詳細は次のとおりです。

1 つのフォームに複数の送信ボタンがあり、ユーザー アクションを区別するためにボタンの値が ActionMethod で使用されます。すべてがうまく機能します。モデルのアクション フィールドに「作成」と「更新」が表示されます。送信イベントに jQuery ハンドラーを配置しない限り、今回は常に「インデックス」を取得し始めています。実際、ハンドラー自体はまだ問題ありませんが、送信ボタンを無効にする 1 行が魔法を実行します。

ここで何が起こっているのか説明できる人はいますか? 前もって感謝します。

ページ (Index.cshtml):

@model MvcButtonTest.Models.HomeData
<html>
<head>
<title>Index</title>
@System.Web.Optimization.Scripts.Render("~/bundles/jquery")
<script>
    $(document).ready(function () {
        $("form").submit(function (ev) {
//          $(":submit", this).attr("disabled", "disabled");
        });
    });
</script>
</head>
<body>
    @using (Html.BeginForm())
    {
        @Html.EditorFor(model => model.Name)<br />
        @Html.EditorFor(model => model.ID)
        <input name="Action" type="submit" value="Create" />
        <input name="Action" type="submit" value="Update" />
        <input name="Action" type="submit" value="Delete" />
    }     
</body>
</html>

モデル HomeData.cs:

public class HomeData
{
    public String Name { get; set; }
    public String Action { get; set; }
    public Int32 ID { get; set; }
}

コントローラー HomeController.cs:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(HomeData data)
    {
        // data.Action - check if it's Create or Delete
        return View();
    }
}
4

1 に答える 1

1

これは、無効な入力送信されないため、クリックされたボタンの値を送信していないためです。

フォーム データに "Action" パラメーターがないため、MVC はリクエストに一致したルートのアクション パラメーター (この場合は Index メソッド) を使用しています。(モデル プロパティの名前を変更し、名前を Action ではなく MyAction に入力すると、応答に値が含まれておらず、プロパティ名がどのルート セグメントとも一致しないため、値が null と表示されます)。

于 2013-11-03T15:10:47.903 に答える