MVCコントローラーとアクションメソッドを呼び出すHTMLボタン


205

私はこれが正しくないことを知っていますが、説明のために、次のようなことをしたいと思います。

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

私の目標は、MVCコントローラーのアクションメソッドを呼び出すHTMLボタンを作成することです。


4
「コール」を定義します。これは、いくつかの可能性を示すために、AJAX呼び出し、別のページへのリンク、またはフォームの投稿を意味する可能性があります。
3Dave、2010年

上記のほとんどの回答はすでに機能している可能性がありますが、残念ながら私には機能しませんでした。Stackoverflowの別の投稿からの有用な回答が見つかりまし。ドットネットフレームワーク4.7 mvc5とブートストラップバージョン3. *を備えたASPで、そしてもちろんRazor Viewで動作しました。私が想定している質問の主な目的は、ボタンのように見えるリンクを表示することです。
Imran Faruqi

回答:


265

アクションに投稿する場合を除き、フォームを使用する必要はありません。入力ボタン(送信ではない)でうまくいきます。

  <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

11
それは私のコードで終了しない文字列定数エラーを出します
BurakKarakuşJun

5
それと共にパラメーターを渡したい場合は、次のように使用できます<input type="button" value="Go Somewhere Else" onclick="location.href='<%: Url.Action("Action", "Controller", new { parameter1 = value1 }) %>'" />
HowlinWulf

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

242

Razor構文は次のとおりです。

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

4
IDEでまだ「終了していない文字列定数」エラーが発生しましたが、正しく表示されませんでした。私はここからソリューションを使用する必要がありました:stackoverflow.com/a/16420877/410937
atconway 2014年

1
@atconway-奇妙なことに、この答えがそれをどのように提示するかは、私にとってはうまくいきました。VS2013。
アメトレン2014年

6
@atconway-同じエラーがありましたが、タグがから'input'に変更さ'button'れ、エラーが解決しました。
トニースターク

6
パラメータ付き<input type = "button" title = "Delete" value = "D" onclick = "location.href = '@ Url.Action(" Delete "、" movies "、new {id = item.ID})' "/>
Sandeep、2014

私の場合、使用<button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>したのはトリックでした
Atiq Baqi

69
<button type="button" onclick="location.href='@Url.Action("MyAction", "MyController")'" />

type = "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 '25 / 07/25

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>要素は、それを含むフォームにのみポストバックできます。

したがって、アクションにPOSTするフォームを作成し、フォームに<button>または<input type="submit" />を配置する必要があります。


5

「未終了の文字列定数」としてエラーが発生した場合は、次のかみそり構文を使用します。

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

5

onclickメソッドにもかかわらず、次のようにformactionを使用することもできます。

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

HttpPost動詞属性を持つアクションがある場合、これはより適切に機能します。Webクローラーがこれらの破壊的なリンクにアクセスするのを停止します(この情報についてはヘクターコレアに感謝します)
Tahir Khalid


4

したがって、私はRazorを使用していますが、これはどちらを使用しても機能します。私は基本的にボタンをリンクでラップしています。

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

4

コントローラにアクションを実装するときは、

return View("Index");

または

return RedirectToAction("Index");

Index.cshtml(またはアクションを生成するページ)ページはすでに定義されています。そうしないと、「ビューまたはそのマスターが見つかりませんでした...」エラーが発生する可能性があります。

ソース:https : //blogs.msdn.microsoft.com/aspnetue/2010/09/17/best-practices-for-asp-net-mvc/


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")にいて、管理コントローラーのインデックスアクションを呼び出したい場合は、次のようにしてください。

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

1

この例を使用することをお勧めします

を使用してアクションとコントローラーを呼び出すActionLink

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

0

OK、基本的にはアクションをボタンに渡し、クリックが発生したときにそれを呼び出す必要があります。それは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")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.