Wiem, że to nie w porządku, ale dla ilustracji chciałbym zrobić coś takiego:
<%= Html.Button("Action", "Controller") %>
Moim celem jest utworzenie przycisku HTML, który wywoła metodę działania mojego kontrolera MVC.
Wiem, że to nie w porządku, ale dla ilustracji chciałbym zrobić coś takiego:
<%= Html.Button("Action", "Controller") %>
Moim celem jest utworzenie przycisku HTML, który wywoła metodę działania mojego kontrolera MVC.
Odpowiedzi:
W ogóle nie musisz używać formularza, chyba że chcesz opublikować post na akcji. Przycisk wprowadzania (nie prześlij) załatwi sprawę.
<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 }) %>'" />
Składnia Razor jest tutaj:
<input type="button" value="Create" onclick="location.href='@Url.Action("Create", "User")'" />
'input'
na 'button'
i to rozwiązało błąd.
<button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>
zrobiłem lewę
<button type="button" onclick="location.href='@Url.Action("MyAction", "MyController")'" />
type = "button" zapobiega przesyłaniu strony. zamiast tego wykonuje twoją akcję.
Spróbuj tego:
@Html.ActionLink("DisplayText", "Action", "Controller", route, attribute)
To powinno ci pomóc.
Możesz użyć Url.Action, aby określić generowanie adresu URL do akcji kontrolera, dzięki czemu możesz użyć jednej z następujących czynności:
<form method="post" action="<%: Url.Action("About", "Home") %>">
<input type="submit" value="Click me to go to /Home/About" />
</form>
lub:
<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>
W ten sposób możesz przesłać formularz do określonego kontrolera i metody działania w Razor.
<input type="submit" value="Upload" onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />
W przypadku pojawienia się błędu jako „niezakończonej stałej ciągu”, użyj następującej składni maszynki:
<input type="button" onclick="@("location.href='"+ Url.Action("Index","Test")+ "'")" />
lepiej skorzystać z tego przykładu
<a href="@Url.Action("Register","Account", new {id=Item.id })"
class="btn btn-primary btn-lg">Register</a>
Po zaimplementowaniu akcji w kontrolerze użyj
return View("Index");
lub
return RedirectToAction("Index");
gdzie strona Index.cshtml (lub strona, która generuje akcję) jest już zdefiniowana. W przeciwnym razie prawdopodobnie napotkasz błąd „nie znaleziono widoku lub jego wzorca…”.
Źródło: https://blogs.msdn.microsoft.com/aspnetue/2010/09/17/best-practices-for-asp-net-mvc/
Pomimo metody onclick możesz również użyć formaction w następujący sposób:
<button type="submit" id="button1" name="button1" formaction='@Url.Action("Action", "Controller")'>Save</button>
Skorzystaj z tego przykładu:
<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>
Jeśli jesteś na stronie głównej („/ Home / Index”) i chcesz wywołać akcję Indeks kontrolera administracyjnego, skorzystanie z tej opcji będzie dla Ciebie odpowiednie.
<li><a href="/Admin/Index">Admin</a></li>
lepiej skorzystać z tego przykładu .
Wywołaj akcję i kontroler za pomocą ActionLink
:
@Html.ActionLink("Submit", "Action", "Controller", route, new { @class = "btn btn-block"})
OK, to w zasadzie trzeba przekazać skargę do przycisku i nazwać gdy kliknięcie dzieje, to nie musi znajdować się wewnątrz od, można używać HTML onclick
na przycisku do uruchomienia go, gdy przycisk dostać kliknięciu ...
<button id="my-button" onclick="location.href='@Url.Action("YourActionName", "YourControllerName")'">Submit</button>
Zawsze możesz bawić się przy pomocy htmlHelpers i budować różne rzeczy
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);
}
}
A potem w widoku nazywają to tak
@Html.BtnWithAction("btnCaretakerBack", "Back", "btn btn-primary float-right", "Index", "Caretakers")