Je sais que ce n'est pas juste, mais pour l'illustration, j'aimerais faire quelque chose comme ça:
<%= Html.Button("Action", "Controller") %>
Mon objectif est de créer un bouton HTML qui appellera la méthode d'action de mon contrôleur MVC.
Je sais que ce n'est pas juste, mais pour l'illustration, j'aimerais faire quelque chose comme ça:
<%= Html.Button("Action", "Controller") %>
Mon objectif est de créer un bouton HTML qui appellera la méthode d'action de mon contrôleur MVC.
Réponses:
Pas besoin d'utiliser un formulaire du tout, sauf si vous souhaitez publier dans l'action. Un bouton de saisie (non soumis) fera l'affaire.
<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 syntaxe du rasoir est ici:
<input type="button" value="Create" onclick="location.href='@Url.Action("Create", "User")'" />
'input'
à 'button'
et cela a résolu l'erreur.
<button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>
fait de faire l'affaire
<button type="button" onclick="location.href='@Url.Action("MyAction", "MyController")'" />
type = "button" empêche la soumission de la page. au lieu de cela, il exécute votre action.
Essaye ça:
@Html.ActionLink("DisplayText", "Action", "Controller", route, attribute)
Cela devrait fonctionner pour vous.
Vous pouvez utiliser Url.Action pour spécifier générer l'URL d'une action de contrôleur, vous pouvez donc utiliser l'une des options suivantes:
<form method="post" action="<%: Url.Action("About", "Home") %>">
<input type="submit" value="Click me to go to /Home/About" />
</form>
ou:
<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>
C'est ainsi que vous pouvez soumettre votre formulaire à un contrôleur et une méthode d'action spécifiques dans Razor.
<input type="submit" value="Upload" onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />
Si vous obtenez une erreur en tant que "constante de chaîne non terminée", utilisez la syntaxe de rasoir suivante:
<input type="button" onclick="@("location.href='"+ Url.Action("Index","Test")+ "'")" />
Malgré la méthode onclick, vous pouvez également utiliser la formaction comme suit:
<button type="submit" id="button1" name="button1" formaction='@Url.Action("Action", "Controller")'>Save</button>
il vaut mieux utiliser cet exemple
<a href="@Url.Action("Register","Account", new {id=Item.id })"
class="btn btn-primary btn-lg">Register</a>
Lorsque vous implémentez l'action dans le contrôleur, utilisez
return View("Index");
ou
return RedirectToAction("Index");
où la page Index.cshtml (ou la page qui génère l'action) est déjà définie. Sinon, vous rencontrez probablement l'erreur "la vue ou son maître n'a pas été trouvé ...".
Source: https://blogs.msdn.microsoft.com/aspnetue/2010/09/17/best-practices-for-asp-net-mvc/
Utilisez cet exemple:
<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 vous êtes sur la page d'accueil ("/ Home / Index") et que vous souhaitez appeler l'action Index du contrôleur Admin, la procédure suivante fonctionnera pour vous.
<li><a href="/Admin/Index">Admin</a></li>
il vaut mieux utiliser cet exemple .
Action d'appel et contrôleur à l'aide d'un ActionLink
:
@Html.ActionLink("Submit", "Action", "Controller", route, new { @class = "btn btn-block"})
OK, vous devez essentiellement passer l'action au bouton et l'appeler lorsque le clic se produit, il n'a pas besoin d'être à l'intérieur d'un, vous pouvez utiliser HTML onclick
sur le bouton pour le déclencher lorsque le bouton est cliqué ...
<button id="my-button" onclick="location.href='@Url.Action("YourActionName", "YourControllerName")'">Submit</button>
Vous pouvez toujours jouer avec htmlHelpers et créer des trucs
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);
}
}
Et puis sur la vue, appelez-le comme ça
@Html.BtnWithAction("btnCaretakerBack", "Back", "btn btn-primary float-right", "Index", "Caretakers")