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

来源:未知 责任编辑:责任编辑 发表时间:2013-12-01 14:20 点击:

默认情况下,一个表单只能有一个提交事件,这不难理解,但有时我们需要有多个实现,早在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" });

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 浅析.NET下XML数据访问新机制
  • asp.net 面试+笔试题目第1/2页
  • C# 邮件地址是否合法的验证
  • C#高级编程:数据库连接[1]
  • asp.net 设置GridView的选中行的实现代码
  • 经典C++程序1
  • IIS 自动回收导致后台定时器失效的问题解决
  • ASP.NET GridView列表代码示例
  • 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transforma
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1