单击一个按钮,在ASP.NET中调用控制器中的方法

时间:2014-02-12 22:32:36

标签: asp.net asp.net-mvc

我想做一些非常简单的事情,即创建一个HTML按钮,在单击时调用控制器函数,与此HTML动作链接相同。这应该非常容易。行动链接是:

@ Html.ActionLink(“提交”,“提交”,“主页”)

我正在使用Razer viewmodel和.NET 4.5。我做了一些研究,似乎我可能需要创建自己的自定义按钮。我很好,但这真的有必要吗?见:Mvc Html.ActionButton。对于没有本机微软支持的人来说似乎是一种疏忽,但如果没有,我就可以忍受。

请原谅这个问题的天真 - 我是ASP.NET新手,但不是C#或Web开发。谢谢!

1 个答案:

答案 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)
    {
        ...
}