0

我一直在寻找处理表单中多个提交按钮的好技巧,然后我从这个 url 得到了一些建议,我跟着但失败了。 如何处理 ASP.NET MVC 框架中的多个提交按钮?

由@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(…) {
        //…
    } 
}

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

4

2 回答 2

4

看法:

<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
   }
}
于 2013-09-16T14:03:52.827 回答
1

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

我有 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...
}

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

于 2013-09-16T13:43:01.247 回答