我想做一些非常简单的事情,即创建一个HTML按钮,在单击时调用控制器函数,与此HTML动作链接相同。这应该非常容易。行动链接是:
@ Html.ActionLink(“提交”,“提交”,“主页”)
我正在使用Razer viewmodel和.NET 4.5。我做了一些研究,似乎我可能需要创建自己的自定义按钮。我很好,但这真的有必要吗?见:Mvc Html.ActionButton。对于没有本机微软支持的人来说似乎是一种疏忽,但如果没有,我就可以忍受。
请原谅这个问题的天真 - 我是ASP.NET新手,但不是C#或Web开发。谢谢!
答案 0 :(得分:2)
我从某处抓住了这个。但您可以使用以下代码将视图操作映射到控制器操作。
使用以下代码创建一个类。
[AttributeUsage(AttributeTargets.Method, AllowMultiple=false, Inherited=true)]
public class MultipleButtonAttribute : ActionNameSelectorAttribute
{
public string Name { get; set; }
public string Argument { get; set; }
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
var isValidName = false;
var keyValue = string.Format("{0}:{1}", Name, Argument);
var value = controllerContext.Controller.ValueProvider.GetValue(keyValue);
if (value != null)
{
controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument;
isValidName = true;
}
return isValidName;
}
}
在您的查看代码中,您可以拥有以下提交按钮
<input type="submit" value="Action A" name="action:ActionA" />
<input type="submit" value="Action B" name="action:ActionB" />
您的控制器包含以下代码。
[HttpPost]
[MultipleButton(Name="action", Argument="ActionA")]
public ActionResult MyActionA(myModel model)
{
...
}
[HttpPost]
[MultipleButton(Name = "action", Argument = "ActionB")]
public ActionResult MyActionB(myModel model)
{
...
}