MVC中一个表单实现多个提交按钮(一个action搞定添删改)

简介:

默认情况下,一个表单只能有一个提交事件,这不难理解,但有时我们需要有多个实现,早在ASP时代就可以实现这个功能,难道到了MVC时代后,功能削减了?当然不是,这和MVC本身有关,微软在这方面比较提倡一个提交事件对应一个action,这和它自代的实例是相吻合的,而一个action可能会根据请求方式不同分为GET和POST两种,这样的设计确实很清晰,代码可能是这样

public ActionResult Index()
{
    if (current.HasUserInfo)
        Response.Write(current.UserInfo.UserName);
    else
        Response.Write("没?有Dcookies");
    return View();
}
[HttpPost]
public ActionResult Index(FormCollection form)
{
   ClientHelper.StandUserInfo(new ClientUserBase { UserName = "zzl", UserID = "1", Password = "123", Email = "bobo" });
    if (current.HasUserInfo)
        Response.Write(current.UserInfo.UserName);
    else
        Response.Write("没Dcookies");
    return View();
}
而如果我们非要将三个按钮集成到一个action上也不是没有可能,我们可以借助.net的特性(attribute)功能实现
 
public class MultiButtonAttribute : ActionNameSelectorAttribute
   {
       public string Name { get; set; }
       public MultiButtonAttribute(string name)
       {
           this.Name = name;
       }
       public override bool IsValidName(ControllerContext controllerContext,
           string actionName, System.Reflection.MethodInfo methodInfo)
       {
           if (string.IsNullOrEmpty(this.Name))
           {
               return false;
           }
           return controllerContext.HttpContext.Request.Form.AllKeys.Contains(this.Name);
       }
   }

而我们的Index方法会加上一个特性来实现多按钮提交的功能,代码如下

    [HttpPost]
       [MultiButton("write")]
       public ActionResult Index(FormCollection form)
       {
   ClientHelper.StandUserInfo(new ClientUserBase { UserName = "zzl", UserID = "1", Password = "123", Email = "bobo" });
           if (current.HasUserInfo)
               Response.Write(current.UserInfo.UserName);
           else
               Response.Write("没?有Dcookies");
           return View();
       }

       [HttpPost]
       [MultiButton("del")]
       public ActionResult Index(FormCollection form, int? a)
       {
           ClientHelper.UserLogout();
           if (current.HasUserInfo)
               Response.Write(current.UserInfo.UserName);
           else
               Response.Write("没?有Dcookies");
           return View();
       }

其中[MultiButton("del")] 这个特性中的del代表前台按钮的name,而不是ID,这点需要注意一下。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:MVC中一个表单实现多个提交按钮(一个action搞定添删改),如需转载请自行联系原博主。

目录
相关文章
|
5月前
|
前端开发 Java Spring
Spring MVC拦截器+注解方式实现防止表单重复提交
Spring MVC拦截器+注解方式实现防止表单重复提交
|
4月前
|
存储 前端开发 Java
Spring Boot中Spring MVC的表单标签库与数据绑定讲解与实战(附源码 超详细必看)
Spring Boot中Spring MVC的表单标签库与数据绑定讲解与实战(附源码 超详细必看)
33 0
|
前端开发 Java Spring
Spring MVC框架:第八章:表单form:form标签
Spring MVC框架:第八章:表单form:form标签
163 0
Spring MVC框架:第八章:表单form:form标签
|
JSON 前端开发 Java
Spring MVC 实战:复杂类型接收表单字段
前言 这是 Spring MVC 处理器方法参数实战的第二篇,我们来尝试使用复杂的成员变量类型来接收 form 表单字段。 对于普通的 Java Web 项目,我们一般通过 ServletRequest#getParameter 方法来获取字符串类型的 form 表单字段值。
181 0
Spring MVC 实战:复杂类型接收表单字段
|
前端开发
.NET MVC第五章、模型绑定获取表单数据
.NET MVC第五章、模型绑定获取表单数据
58 0
.NET MVC第五章、模型绑定获取表单数据
|
前端开发
.NET MVC第四章、模型绑定获取表单数据
.NET MVC第四章、模型绑定获取表单数据
85 0
.NET MVC第四章、模型绑定获取表单数据
|
前端开发 数据库
MVC中Action之间传值
MVC中Action之间传值
133 0
MVC中Action之间传值
|
开发框架 前端开发 .NET
ASP.NET MVC (三、表单与文件上传)(3)
ASP.NET MVC (三、表单与文件上传)(3)
101 0
ASP.NET MVC (三、表单与文件上传)(3)
|
开发框架 前端开发 .NET
ASP.NET MVC (三、表单与文件上传)(2)
ASP.NET MVC (三、表单与文件上传)(2)
57 0
ASP.NET MVC (三、表单与文件上传)(2)
|
开发框架 前端开发 .NET
ASP.NET MVC (三、表单与文件上传)(1)
ASP.NET MVC (三、表单与文件上传)(1)
87 0
ASP.NET MVC (三、表单与文件上传)(1)