【问题标题】:Handling multiple submit button in form处理表单中的多个提交按钮
【发布时间】:2013-09-16 13:12:56
【问题描述】:

我一直在寻找处理表单中多个提交按钮的好技巧,然后我从这个 url 得到了一些建议,我遵循但失败了。 How do you handle multiple submit buttons in ASP.NET MVC Framework?

由@Andrey Shchekin 发布。

他只是说创建一个像下面这样的类,所以我在同一个控制器中做了

public class HttpParamActionAttribute : ActionNameSelectorAttribute {
    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) {
        if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase))
            return true;

        if (!actionName.Equals("Action", StringComparison.InvariantCultureIgnoreCase))
            return false;

        var request = controllerContext.RequestContext.HttpContext.Request;
        return request[methodInfo.Name] != null;
    }
} 

然后视图中的多个提交按钮如下所示,控制器代码如下所示

<% using (Html.BeginForm("Action", "Post")) { %>
  <!— …form fields… -->
  <input type="submit" name="saveDraft" value="Save Draft" />
  <input type="submit" name="publish" value="Publish" />
<% } %> 

and controller with two methods

public class PostController : Controller {
    [HttpParamAction]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult SaveDraft(…) {
        //…
    }

    [HttpParamAction]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Publish(…) {
        //…
    } 
}

但是当我测试他的代码时它永远不会工作。所以任何人都可以告诉我我在哪里犯了错误,或者代码本身对于处理这种情况是错误的。谢谢

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    查看:

    <input type="submit" name="mySubmit" value="Save Draft" />
    <input type="submit" name="mySubmit" value="Publish" />
    

    控制器动作:

    [HttpPost]
    public ActionResult ActionName(ModelType model, string mySubmit)
    {
       if(mySubmit == "Save Draft")
       {
          //save draft code here
       } else if(mySubmit == "Publish")
       {
          //publish code here
       }
    }
    

    【讨论】:

      【解决方案2】:

      当我要求用户可以完成或保存医院婴儿记录的进度时,我不得不处理类似的情况 - 基本上这两个操作都是提交,但一个验证记录以插入主数据库表,另一个保存它进入一个临时表没有任何验证。我是这样处理的:

      我有 2 个按钮,它们都是具有不同 ID(btnSave 和 btnFinalize)的类型提交。单击 btnSave 时,我会使用一些 JQuery 代码拦截该事件:

      $("#btnSave").click(function () {
         $("#SaveForm").validate().settings.rules = null;
         $('#SaveForm').attr('action', '@(Url.Content("~/Home/EditCase?finalize=false"))');
      });
      

      如您所见,我将表单的 action 属性修改为指向不同的 URL,其 querystring 属性为 finalize = false。我还删除了模型上存在的任何验证。如果单击另一个按钮,我什么也不做 - 执行默认行为。

      在我的控制器中,我有一个操作可以处理两个提交操作:

      public ActionResult EditCase(EditInfantModel model, bool finalize = true)
      {
          // Logic for handling submit in here...
      }
      

      我认为您可以将类似的技术应用于您的问题。我不确定这是否是您正在寻找的答案,但我认为值得一提...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多