你的位置:首页 > ASP.net教程

[ASP.net教程]MVC页面上多个提交按钮提交到不同的Action


使用mvc扩展类,ActionNameAttribute方法如下:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]  public class MultiButtonAttribute : ActionNameSelectorAttribute  {    public string Name { get; set; }    public string Argument { get; set; }    public MultiButtonAttribute(string name)    {      this.Name = name;    }    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)    {      var key = ButtonKeyFrom(controllerContext);      var keyIsValid = IsValid(key);      if (keyIsValid)      {        UpdateValueProviderIn(controllerContext, ValueFrom(key));      }      return keyIsValid;    }    private string ButtonKeyFrom(ControllerContext controllerContext)    {      var keys = controllerContext.HttpContext.Request.Params.AllKeys;      return keys.FirstOrDefault(KeyStartsWithButtonName);    }    private static bool IsValid(string key)    {      return key != null;    }    private static string ValueFrom(string key)    {      var parts = key.Split(":".ToCharArray());      return parts.Length < 2 ? null : parts[1];    }    private void UpdateValueProviderIn(ControllerContext controllerContext, string value)    {      if (string.IsNullOrEmpty(Argument))        return;      controllerContext.RouteData.Values[this.Argument] = value;    }    private bool KeyStartsWithButtonName(string key)    {      return key.StartsWith(Name, StringComparison.InvariantCultureIgnoreCase);    }  }

Controller:

[HttpPost] [MultiButton(Name = "delete", Argument = "id")] public ActionResult Delete(string id) {   return View(); } 

或者

    [HttpPost]    [MultiButton("btnSearch")]    public ActionResult Index(AttendanceList model)    {        return View(model);    }

View:

<input type="submit" value="查询" name="btnSearch" /><input type="submit" value="删除" name="delete:id" />