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,这点需要注意一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示