私はこれが正しくないことを知っていますが、説明のために、次のようなことをしたいと思います。
<%= Html.Button("Action", "Controller") %>
私の目標は、MVCコントローラーのアクションメソッドを呼び出すHTMLボタンを作成することです。
私はこれが正しくないことを知っていますが、説明のために、次のようなことをしたいと思います。
<%= Html.Button("Action", "Controller") %>
私の目標は、MVCコントローラーのアクションメソッドを呼び出すHTMLボタンを作成することです。
回答:
アクションに投稿する場合を除き、フォームを使用する必要はありません。入力ボタン(送信ではない)でうまくいきます。
<input type="button"
value="Go Somewhere Else"
onclick="location.href='<%: Url.Action("Action", "Controller") %>'" />
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)); }
<input type="button" value="Go Somewhere Else" onclick="location.href='<%: Url.Action("Action", "Controller", new { parameter1 = value1 }) %>'" />
Razor構文は次のとおりです。
<input type="button" value="Create" onclick="location.href='@Url.Action("Create", "User")'" />
'input'
に変更さ'button'
れ、エラーが解決しました。
<button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>
したのはトリックでした
<button type="button" onclick="location.href='@Url.Action("MyAction", "MyController")'" />
type = "button"は、ページが送信されないようにします。代わりに、アクションを実行します。
これを試して:
@Html.ActionLink("DisplayText", "Action", "Controller", route, attribute)
これでうまくいくはずです。
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>
onclickメソッドにもかかわらず、次のようにformactionを使用することもできます。
<button type="submit" id="button1" name="button1" formaction='@Url.Action("Action", "Controller")'>Save</button>
コントローラにアクションを実装するときは、
return View("Index");
または
return RedirectToAction("Index");
Index.cshtml(またはアクションを生成するページ)ページはすでに定義されています。そうしないと、「ビューまたはそのマスターが見つかりませんでした...」エラーが発生する可能性があります。
ソース:https : //blogs.msdn.microsoft.com/aspnetue/2010/09/17/best-practices-for-asp-net-mvc/
いつでも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")