zoukankan      html  css  js  c++  java
  • 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,这点需要注意一下。

  • 相关阅读:
    oracle 数据库服务名怎么查
    vmware vsphere 6.5
    vSphere虚拟化之ESXi的安装及部署
    ArcMap中无法添加ArcGIS Online底图的诊断方法
    ArcGIS中字段计算器(高级计算VBScript、Python)
    Bad habits : Putting NOLOCK everywhere
    Understanding the Impact of NOLOCK and WITH NOLOCK Table Hints in SQL Server
    with(nolock) or (nolock)
    What is “with (nolock)” in SQL Server?
    Changing SQL Server Collation After Installation
  • 原文地址:https://www.cnblogs.com/lori/p/2364360.html
Copyright © 2011-2022 走看看