ฉันรู้ว่ามันไม่ถูกต้อง แต่เพื่อภาพประกอบฉันต้องการทำสิ่งนี้:
<%= Html.Button("Action", "Controller") %>
เป้าหมายของฉันคือสร้างปุ่ม HTML ที่จะเรียกวิธีการทำงานของคอนโทรลเลอร์ MVC ของฉัน
ฉันรู้ว่ามันไม่ถูกต้อง แต่เพื่อภาพประกอบฉันต้องการทำสิ่งนี้:
<%= Html.Button("Action", "Controller") %>
เป้าหมายของฉันคือสร้างปุ่ม HTML ที่จะเรียกวิธีการทำงานของคอนโทรลเลอร์ MVC ของฉัน
คำตอบ:
ไม่จำเป็นต้องใช้แบบฟอร์มเลยเว้นแต่ว่าคุณต้องการโพสต์ไปยังการดำเนินการ ปุ่มป้อนข้อมูล (ไม่ส่ง) จะทำการหลอกลวง
<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 }) %>'" />
ไวยากรณ์ของมีดโกนอยู่ที่นี่:
<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>
นี่คือวิธีที่คุณสามารถส่งแบบฟอร์มของคุณไปยังตัวควบคุมและวิธีการดำเนินการเฉพาะในมีดโกน
<input type="submit" value="Upload" onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />
จากคำตอบข้างต้นสองข้อคุณสามารถทำได้:
<button onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />
<button>
องค์ประกอบHTML สามารถโพสต์กลับไปยังแบบฟอร์มที่มีมันเท่านั้น
ดังนั้นคุณต้องสร้างฟอร์มที่โพสต์ไปยังแอ็คชันจากนั้นใส่<button>
หรือ<input type="submit" />
ในฟอร์ม
ในกรณีที่คุณได้รับข้อผิดพลาดว่า "ค่าคงที่สตริงที่ไม่ถูกทำลาย" ให้ใช้ไวยากรณ์ของมีดโกนต่อไปนี้:
<input type="button" onclick="@("location.href='"+ Url.Action("Index","Test")+ "'")" />
มันควรใช้ตัวอย่างนี้ดีกว่า
<a href="@Url.Action("Register","Account", new {id=Item.id })"
class="btn btn-primary btn-lg">Register</a>
ดังนั้นฉันใช้มีดโกน แต่จะใช้งานได้เช่นกัน ฉันโดยทั่วไปห่อปุ่มในลิงค์
<a href="Controller/ActionMethod">
<input type="button" value="Click Me" />
</a>
เมื่อคุณใช้แอคชั่นในคอนโทรลเลอร์ให้ใช้
return View("Index");
หรือ
return RedirectToAction("Index");
โดยที่ Index.cshtml (หรือหน้าที่สร้างการกระทำ) หน้าถูกกำหนดไว้แล้ว มิฉะนั้นคุณอาจพบข้อผิดพลาด "มุมมองหรือต้นแบบไม่พบ ... "
ที่มา: https://blogs.msdn.microsoft.com/aspnetue/2010/09/17/best-practices-for-asp-net-mvc/
แม้จะมีเมธอด onclick คุณยังสามารถใช้ formaction ดังนี้:
<button type="submit" id="button1" name="button1" formaction='@Url.Action("Action", "Controller")'>Save</button>
ใช้ตัวอย่างนี้:
<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>
หากคุณอยู่ในหน้าแรก ("/ หน้าแรก / ดัชนี") และคุณต้องการเรียกการกระทำดัชนีของตัวควบคุมผู้ดูแลระบบต่อไปนี้จะทำงานให้คุณ
<li><a href="/Admin/Index">Admin</a></li>
จะดีกว่าที่จะใช้ตัวอย่างนี้
เรียกการกระทำและตัวควบคุมโดยใช้ActionLink
:
@Html.ActionLink("Submit", "Action", "Controller", route, new { @class = "btn btn-block"})
ตกลงโดยทั่วไปคุณจะต้องผ่านการกระทำไปที่ปุ่มและเรียกมันเมื่อคลิกเกิดขึ้นมันไม่จำเป็นต้องอยู่ภายในจากคุณสามารถใช้ HTML onclick
บนปุ่มเพื่อทริกเกอร์เมื่อปุ่มได้รับการคลิก ...
<button id="my-button" onclick="location.href='@Url.Action("YourActionName", "YourControllerName")'">Submit</button>
คุณสามารถเล่นกับ 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")