调用MVC控制器和Action方法的HTML按钮


204

我知道这是不对的,但是为了说明起见,我想做这样的事情:

<%= Html.Button("Action", "Controller") %>

我的目标是制作一个HTML按钮,该按钮将调用我的MVC控制器的action方法。


4
定义“通话”。这可能意味着AJAX调用,到另一个页面的链接或发布表单,仅举几例。
3Dave 2010年

上面的大多数答案可能已经有用,但是不幸的是,没有一个对我有用。我从另一个Stackoverflow帖子中找到一个有用的答案!它为我在带有点网框架4.7 mvc5和Bootstrap版本3. *的ASP上工作,当然在Razor View中也是如此。我假定的问题的主要目的是显示一个看起来像按钮的链接。
伊姆兰·法鲁奇

Answers:


264

除非您要张贴到操作中,否则根本不需要使用表格。输入按钮(不提交)可以解决问题。

  <input type="button"
         value="Go Somewhere Else"
         onclick="location.href='<%: Url.Action("Action", "Controller") %>'" />

1
我使用了此建议,因为它不需要表格。谢谢!
亚伦·萨拉萨

2
可能将其包装在HtmlHelper中,例如public static string ActionButton(this HtmlHelper helper, string action, string controller, string text) { return String.Format("<input type=\"button\" value=\"{0}\" onclick=\"location.href='{1}' />",text,Url.Action(action,controller)); }
Menahem 2013年

11
它在我的代码中给出了未
终止的

5
如果您想传递参数,可以使用<input type="button" value="Go Somewhere Else" onclick="location.href='<%: Url.Action("Action", "Controller", new { parameter1 = value1 }) %>'" />
HowlinWulf14年

1
<input type =“ button” value =“ DeleteAll” onclick =“ location.href ='@ Url.Action(” DeleteAll“,” Home“)'” />
Yuchao Zhou

242

剃刀语法在这里:

<input type="button" value="Create" onclick="location.href='@Url.Action("Create", "User")'" />

4
我在IDE中仍然出现“未终止的字符串常量”错误,该错误仍无法正确呈现。我不得不从这里使用解决方案:stackoverflow.com/a/16420877/410937
atconway 2014年

1
@atconway-奇怪,它对我来说确实是这个答案是如何呈现的。VS2013。
ametren

6
@atconway-发生相同的错误,但是更改了将标签从更改'input''button',从而解决了该错误。
托尼·史塔克

6
使用参数<input type =“ button” title =“删除” value =“ D” onclick =“ location.href ='@ Url.Action(” Delete“,” movies“,new {id = item.ID})' “ />
Sandeep

以我<button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>
为例,


16

试试这个:

@Html.ActionLink("DisplayText", "Action", "Controller", route, attribute)

这应该为您工作。


您还可以使用引导程序或其他CSS类,例如:@ Html.ActionLink(“ DisplayText”,“ Action”,[“ Controller”],routeValues:null,htmlAttributes:new {@ class =“ btn btn-info btn-md “,style =” white-space:normal“})
Asaf

15

您可以使用Url.Action指定生成控制器操作的url,因此可以使用以下任一方法:

<form method="post" action="<%: Url.Action("About", "Home") %>">
   <input type="submit" value="Click me to go to /Home/About" />
</form>

要么:

<form action="#">
  <input type="submit" onclick="parent.location='<%: Url.Action("About", "Home") %>';return false;" value="Click me to go to /Home/About" />
  <input type="submit" onclick="parent.location='<%: Url.Action("Register", "Account") %>';return false;" value="Click me to go to /Account/Register" />
</form>

11

这样可以将表单提交到Razor中的特定控制器和操作方法。

 <input type="submit" value="Upload" onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />

10

在以上几个答案的基础上,您可以执行以下操作:

<button onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />

6

HTML <button>元素只能回发到包含它的表单。

因此,您需要制作一个表单,将其发布到操作中,然后在表单中放置一个<button><input type="submit" />


5

如果您遇到“未终止的字符串常量”错误,请使用以下剃刀语法:

<input type="button" onclick="@("location.href='"+ Url.Action("Index","Test")+ "'")" />


4

因此,我使用的是Razor,但无论使用哪种方法都可以。我基本上是在链接中包装一个按钮。

<a href="Controller/ActionMethod">
    <input type="button" value="Click Me" />
</a>


4

尽管使用了onclick方法,您也可以按以下方式使用formaction:

<button type="submit" id="button1" name="button1" formaction='@Url.Action("Action", "Controller")'>Save</button>

如果您的动作具有HttpPost动词属性,则此方法效果更好,它将阻止网络爬虫访问那些破坏性链接(感谢赫克托·科雷亚(Hector Correa)提供此信息)
Tahir Khalid

3

使用以下示例:

<button name="nameButton" id="idButton" title="your title" class="btn btn-secondary" onclick="location.href='@Url.Action( "Index","Controller" new {  id = Item.id })';return false;">valueButton</button>

1

如果您位于主页(“ / Home / Index”)中,并且希望调用Admin controller的Index操作,则可以执行以下操作。

<li><a href="/Admin/Index">Admin</a></li>

1

最好使用这个例子

使用调用动作和控制器ActionLink

@Html.ActionLink("Submit", "Action", "Controller", route, new { @class = "btn btn-block"})

0

好的,您基本上需要将操作传递给按钮并在单击发生时调用它,它不需要在from内,您可以在按钮被单击时使用HTML onclickon button来触发它...

<button id="my-button" onclick="location.href='@Url.Action("YourActionName", "YourControllerName")'">Submit</button>

0

您可以随时使用htmlHelpers并构建一些东西

    public static IHtmlContent BtnWithAction(this IHtmlHelper htmlHelper, string id, string text, string css="", string action="", string controller="")
    {
        try
        {
            string str = $"<button id=\"{id}\" class=\"{css}\" type=\"button\" ###>{text}</button>";
            if (!string.IsNullOrEmpty(action) && !string.IsNullOrEmpty(controller))
            {                    
                string url = ((TagBuilder)htmlHelper.ActionLink("dummy", action, controller)).Attributes["href"];
                var click = !string.IsNullOrEmpty(url) ? $"onclick=\"location.href='{url}'\"" : string.Empty;
                return new HtmlString(str.Replace("###", click));
            }
            return new HtmlString(str.Replace("###", string.Empty));
        }
        catch (Exception ex)
        {
            Log.Error(ex, ex.Message);
            var fkup = "<script>alert(\"assumption is the mother of all failures\")</script>";
            return new HtmlString(fkup);
        }
    }

然后在视图上这样称呼它

@Html.BtnWithAction("btnCaretakerBack", "Back", "btn btn-primary float-right", "Index", "Caretakers")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.