1,添加自定义标签属性:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultiButtonAttribute : ActionNameSelectorAttribute
{
public string Name { get; set; }
public string Argument { get; set; }
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.Controller.ValueProvider.GetValue(Argument);
}
private bool KeyStartsWithButtonName(string key)
{
return key.StartsWith(Name, StringComparison.InvariantCultureIgnoreCase);
}
}
2.处理action为其添加标签
[HttpPost]
[MultiButton(Name = "Browse", Argument = "genre")]
public ActionResult Browse(string genre)
{
var m=new Genre { Name="Name is "+ genre};
return View(m);
}
[HttpPost]
[MultiButton(Name = "Details", Argument = "id")]
public ActionResult Details(int? id)
{
var album = new Album { Title="Album"+id };
var response = System.Web.HttpContext.Current.Response;
response.Write("Delete action was invoked with " + id);
return View(album);
}