1. ホーム
  2. c#

[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?

2022-03-21 09:46:10

質問

同じフォームから複数の送信ボタンを処理する簡単な方法はありますか?例えば

<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>
<input type="submit" value="Send" />
<input type="submit" value="Cancel" />
<% Html.EndForm(); %>

ASP.NET Framework Betaでこれを行うにはどうしたらいいか、何かアイデアはありますか?私がググったすべての例は、それらの中に単一のボタンを持っています。

どのように解決するのですか?

以下は、複数の送信ボタンの問題を解決するための、属性に基づくほとんどクリーンなソリューションで、以下の投稿とコメントに基づいています。 マールテン・バリアウ .

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultipleButtonAttribute : ActionNameSelectorAttribute
{
    public string Name { get; set; }
    public string Argument { get; set; }

    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
    {
        var isValidName = false;
        var keyValue = string.Format("{0}:{1}", Name, Argument);
        var value = controllerContext.Controller.ValueProvider.GetValue(keyValue);

        if (value != null)
        {
            controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument;
            isValidName = true;
        }

        return isValidName;
    }
}

カミソリ

<form action="" method="post">
 <input type="submit" value="Save" name="action:Save" />
 <input type="submit" value="Cancel" name="action:Cancel" />
</form>

とコントローラで構成されています。

[HttpPost]
[MultipleButton(Name = "action", Argument = "Save")]
public ActionResult Save(MessageModel mm) { ... }

[HttpPost]
[MultipleButton(Name = "action", Argument = "Cancel")]
public ActionResult Cancel(MessageModel mm) { ... }

アップデートする。 Razorのページ は、同じ機能をそのまま提供するようです。新規に開発する場合は、そちらの方が望ましいかもしれません。