Sé que esto no está bien, pero en aras de la ilustración, me gustaría hacer algo como esto:
<%= Html.Button("Action", "Controller") %>
Mi objetivo es crear un botón HTML que llame al método de acción de mi controlador MVC.
fuente
Sé que esto no está bien, pero en aras de la ilustración, me gustaría hacer algo como esto:
<%= Html.Button("Action", "Controller") %>
Mi objetivo es crear un botón HTML que llame al método de acción de mi controlador MVC.
No es necesario utilizar un formulario a menos que desee publicar en la acción. Un botón de entrada (no enviar) hará el truco.
<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 }) %>'" />
La sintaxis de Razor está aquí:
<input type="button" value="Create" onclick="location.href='@Url.Action("Create", "User")'" />
'input'
a 'button'
y eso resolvió el error.
<button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>
usé el truco
<button type="button" onclick="location.href='@Url.Action("MyAction", "MyController")'" />
type = "button" evita que la página se envíe. en su lugar realiza tu acción.
Prueba esto:
@Html.ActionLink("DisplayText", "Action", "Controller", route, attribute)
Esto debería funcionar para ti.
Puede usar Url.Action para especificar generar la url para una acción de controlador, por lo que puede usar cualquiera de los siguientes:
<form method="post" action="<%: Url.Action("About", "Home") %>">
<input type="submit" value="Click me to go to /Home/About" />
</form>
o:
<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>
Así es como puede enviar su formulario a un controlador específico y método de acción en Razor.
<input type="submit" value="Upload" onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />
Sobre la base de algunas de las respuestas anteriores, puede hacer esto:
<button onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />
El HTML <button>
elemento solo puede devolver al formulario que lo contiene.
Por lo tanto, debe hacer un formulario que PUBLICE la acción y luego poner un <button>
o <input type="submit" />
en el formulario.
En caso de que obtenga un error como "constante de cadena no terminada", use la siguiente sintaxis de razor:
<input type="button" onclick="@("location.href='"+ Url.Action("Index","Test")+ "'")" />
A pesar del Método onclick, también puede usar la formación de la siguiente manera:
<button type="submit" id="button1" name="button1" formaction='@Url.Action("Action", "Controller")'>Save</button>
es mejor usar este ejemplo
<a href="@Url.Action("Register","Account", new {id=Item.id })"
class="btn btn-primary btn-lg">Register</a>
Entonces, estoy usando Razor pero esto funcionará usando cualquiera. Básicamente estoy envolviendo un botón en un enlace.
<a href="Controller/ActionMethod">
<input type="button" value="Click Me" />
</a>
Cuando implemente la acción en el controlador, use
return View("Index");
o
return RedirectToAction("Index");
donde Index.cshtml (o la página que genera la acción) ya está definida. De lo contrario, es probable que encuentre el error "no se encontró la vista o su maestro ...".
Fuente: https://blogs.msdn.microsoft.com/aspnetue/2010/09/17/best-practices-for-asp-net-mvc/
Usa este ejemplo:
<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>
Si está en la página de inicio ("/ Inicio / Índice") y desea llamar a la acción Índice del controlador de administración, lo siguiente funcionaría para usted.
<li><a href="/Admin/Index">Admin</a></li>
es mejor usar este ejemplo .
Llamar a la acción y al controlador utilizando un ActionLink
:
@Html.ActionLink("Submit", "Action", "Controller", route, new { @class = "btn btn-block"})
OK, básicamente necesita pasar la acción al botón y llamarlo cuando se hace clic, no necesita estar dentro de un, puede usar HTML onclick
en el botón para activarlo cuando se hace clic en el botón ...
<button id="my-button" onclick="location.href='@Url.Action("YourActionName", "YourControllerName")'">Submit</button>
Siempre puedes jugar con htmlHelpers y construir algunas cosas
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);
}
}
Y luego en la vista llámalo así
@Html.BtnWithAction("btnCaretakerBack", "Back", "btn btn-primary float-right", "Index", "Caretakers")