0

さまざまなアクション操作を実行するための4つの送信ボタンがあります。ワンサブミットのために私はこのように書いています

@using (Html.BeginForm("Edit", "Seller", FormMethod.Post)){ 

}

複数の送信ボタンに対してどのようにできますか?すべての送信ボタンに同じものを書く必要がありますか?

4

2 に答える 2

3

これは、2 つの送信ボタンに対して行う方法です。同様に、「n」個の送信ボタンに対してもこれを行うことができます

以下は、送信ボタンが 2 つあるフォームです。これらの送信ボタンは両方とも同じ名前、つまり「submitButton」であることに注意してください</p>

@Html.BeginForm("MyAction", "MyController"); %>
<input type="submit" name="submitButton" value="Button1" />
<input type="submit" name="submitButton" value="Button2" />
}

コントローラーに移ると、Action は string stringButton という入力パラメーターを受け取ります。残りは一目瞭然です。

public ActionResult MyAction(string submitButton) {
        switch(submitButton) {
            case "Button1":
               // do something here
            case "Button2":
               // do some other thing here
            default:
                // add some other behaviour here
        }
...
}
于 2012-11-12T07:09:56.490 に答える
0

このユースケースには MultiButtonAttribute を使用しています。それは素晴らしく、明確です。ロジックをさまざまなアクション メソッドに分けることができます。

マルチボタン属性

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultiButtonAttribute : ActionNameSelectorAttribute
{
    public MultiButtonAttribute(string matchFormKey) : this(matchFormKey, null) {
    }

    public MultiButtonAttribute(string matchFormKey, string matchFormValue) {
        this.MatchFormKey = matchFormKey;
        this.MatchFormValue = matchFormValue;
    }

    public string MatchFormKey { get; set; }
    public string MatchFormValue { get; set; }

    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
    {
        string value = controllerContext.HttpContext.Request[MatchFormKey];
        return value != null && (value == MatchFormValue || MatchFormValue == null);
    }
}

コントローラ内

[HttpPost]
[MultiButton("buttonPreviousPage")]
public ActionResult NavigateToPreviousPage(int currentPageIndex)
{
// .. action logic
}

ビューで

@using (Html.BeginForm("SomeDefaultAction", "MyController", FormMethod.Post)){ 
    <input type="submit" id="buttonPreviousPage" name="buttonPreviousPage" value="Previous" />
    <input type="submit" id="buttonNextPage" name="buttonNextPage" value="Next" />
}

使い方

MultiButtonAttribute拡張することが重要ですActionNameSelectorAttribute。MVC がルートに一致する正しいメソッドを選択し、メソッドでそのような属性を見つけると、IsValidName属性を渡してメソッドを呼び出しますControllerContext。キー (ボタン名) が POST された形式であり、null 値を持たないかどうかを調べているよりも (または、最終的にキー (ボタン) の期待値を定義できますが、必須ではありません)。

MVC 2 ではかなりうまく機能します (ただし、それ以降のバージョンでも機能することを願っています)。もう 1 つの利点は、ボタンの値をローカライズできることです。

于 2012-11-13T22:48:35.200 に答える