【问题标题】:how to get button name in mvc controller如何在 mvc 控制器中获取按钮名称
【发布时间】:2019-01-14 06:34:48
【问题描述】:

我在 mvc 视图中有两个按钮(不是提交)

    <button type="button" name="submitButton" id="s1" value="AddMore" 
    class="btn btn-success">Add More</button>
     <button type="button" name="submitButton" id="s2" value="SaveandSubmit" 
     class="btn btn-success">Save and Submit</button>

如果他们中的任何一个点击,一些 jquery 验证就在那里 并将明确提交表单

$("form#form1")[0].submit();

在控制器上

     public ActionResult AdditionStart_New(request_dtls request_dtls, string submitButton)
  {
   }

如果按钮类型为“提交”,则按钮名称将出现在控制器中,但问题是即使 jquery 验证错误,它也会提交。

如果根据当前代码按钮类型是“按钮”,则按钮名称不会出现在控制器签名中。它以“空”的形式出现。如何在控制器中获取名称

【问题讨论】:

    标签: asp.net-mvc-4 button model-view-controller


    【解决方案1】:

    您应该能够创建 2 个提交按钮,只需通过 javascript(onclick 事件)拦截第二个按钮的提交并进行验证。如果没有失败,让他提交,否则在 onclick 事件中返回 false。

    在我的控制器中,我有一个自定义注释:

    [HttpPost]
    [MultipleButton(Name = "action", Argument = "Edit")]
    public ActionResult Edit(EditViewModel model)
    

    我视图中的按钮定义为:

    <input type="submit" value="Toevoegen" name="action:AddItemEdit" class="btn btn-primary" />
    <input type="submit" value="Opslaan" name="action:Edit" class="btn btn-success" />
    

    自定义注解为:

    [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;
        }
    }
    

    因此,如果您希望它作为参数或控制器中的不同操作,我猜您可以使用 MultipleButtonAttribute 中的代码。希望这能让你有所收获。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2018-12-24
      • 2013-11-01
      相关资源
      最近更新 更多