Pulsante HTML che chiama un controller MVC e metodo di azione


205

So che non è giusto, ma per motivi di illustrazione mi piacerebbe fare qualcosa del genere:

<%= Html.Button("Action", "Controller") %>

Il mio obiettivo è creare un pulsante HTML che chiamerà il metodo di azione del mio controller MVC.


4
Definisci "chiama". Ciò potrebbe significare una chiamata AJAX, un collegamento a un'altra pagina o la pubblicazione di un modulo, per citarne alcune possibilità.
3Dave il

La maggior parte delle risposte di cui sopra potrebbe già aver funzionato, sfortunatamente nessuna ha funzionato per me. Ho trovato qui una risposta utile da un altro post di Stackoverflow! Ha funzionato per me su ASP con dot net framework 4.7 mvc5 e bootstrap versione 3. * e ovviamente in Razor View. Lo scopo principale della domanda, come presumo, è quello di mostrare un collegamento che assomiglia a un pulsante.
Imran Faruqi,

Risposte:


265

Non è necessario utilizzare un modulo a meno che non si desideri pubblicare un post nell'azione. Un pulsante di input (non inoltrare) farà il trucco.

  <input type="button"
         value="Go Somewhere Else"
         onclick="location.href='<%: Url.Action("Action", "Controller") %>'" />

1
Ho usato questo suggerimento perché non richiede un modulo. Grazie!
Aaron Salazar,

2
potrebbe avvolgerlo in un HtmlHelper qualcosa del generepublic 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)); }
Menahem

11
dà un errore costante di stringa non terminata nel mio codice
Burak Karakuş,

5
Se vuoi passare un parametro con quello, puoi usare<input type="button" value="Go Somewhere Else" onclick="location.href='<%: Url.Action("Action", "Controller", new { parameter1 = value1 }) %>'" />
HowlinWulf il

1
<input type = "button" value = "DeleteAll" onclick = "location.href = '@ Url.Action (" DeleteAll "," Home ")'" />
Yuchao Zhou

242

La sintassi del rasoio è qui:

<input type="button" value="Create" onclick="location.href='@Url.Action("Create", "User")'" />

4
Ho ancora riscontrato un errore "costante di stringa non terminata" nell'IDE che non è stato ancora visualizzato correttamente. Ho dovuto usare la soluzione da qui: stackoverflow.com/a/16420877/410937
atconway

1
@atconway - strano, ha funzionato per me esattamente come questa risposta lo presenta. VS2013.
ametren,

6
@atconway - ha avuto lo stesso errore ma ha cambiato il tag da 'input'a 'button'e questo ha risolto l'errore.
Tony Stark,

6
Con parametri <input type = "button" title = "Delete" value = "D" onclick = "location.href = '@ Url.Action (" Delete "," movies ", new {id = item.ID})' "/>
Sandeep

nel mio caso bastava usare <button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>il trucco
Atiq Baqi il

69
<button type="button" onclick="location.href='@Url.Action("MyAction", "MyController")'" />

type = "button" impedisce l'invio della pagina. invece esegue la tua azione.


16

Prova questo:

@Html.ActionLink("DisplayText", "Action", "Controller", route, attribute)

Questo dovrebbe funzionare per te.


puoi anche usare bootstrap o altre classi css come questa: @ Html.ActionLink ("DisplayText", "Action", ["Controller"], routeValues: null, htmlAttributes: new {@ class = "btn btn-info btn-md ", style =" white-space: normal "})
Assaf

15

Puoi usare Url.Action per specificare generare l'URL per un'azione del controller, in modo da poter utilizzare uno dei seguenti:

<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>

11

Ecco come è possibile inviare il modulo a un controller specifico e al metodo di azione in Razor.

 <input type="submit" value="Upload" onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />

10

Basandoti su un paio di risposte sopra, puoi farlo:

<button onclick="location.href='@Url.Action("ActionName", "ControllerName")'" />

6

L' <button>elemento HTML può solo postback nel modulo che lo contiene.

Pertanto, è necessario creare un modulo POST per l'azione, quindi inserire un <button>o <input type="submit" />nel modulo.


5

Nel caso in cui si verifichi un errore come "costante di stringa non terminata", utilizzare la sintassi del rasoio seguente:

<input type="button" onclick="@("location.href='"+ Url.Action("Index","Test")+ "'")" />

5

Nonostante il metodo onclick puoi anche usare la formulazione come segue:

<button type="submit" id="button1" name="button1" formaction='@Url.Action("Action", "Controller")'>Save</button>

Funziona meglio se hai un'azione con un attributo del verbo HttpPost che impedirà ai web crawler di visitare quei collegamenti distruttivi (grazie a Hector Correa per queste informazioni)
Tahir Khalid

5

è meglio usare questo esempio

<a href="@Url.Action("Register","Account", new {id=Item.id })"
class="btn btn-primary btn-lg">Register</a>


4

Quindi, sto usando Razor ma funzionerà con entrambi. Fondamentalmente sto avvolgendo un pulsante in un collegamento.

<a href="Controller/ActionMethod">
    <input type="button" value="Click Me" />
</a>


3

Usa questo esempio:

<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>

1

Se ti trovi nella home page ("/ Home / Indice") e desideri chiamare l'azione Indice del controller di amministrazione, seguire sarebbe adatto a te.

<li><a href="/Admin/Index">Admin</a></li>

1

è meglio usare questo esempio .

Chiama azione e controller usando un ActionLink:

@Html.ActionLink("Submit", "Action", "Controller", route, new { @class = "btn btn-block"})

0

OK, in pratica è necessario passare l'azione al pulsante e chiamarlo quando si verifica un clic, non è necessario trovarsi all'interno di un da, è possibile utilizzare HTML onclicksul pulsante per attivarlo quando si fa clic sul pulsante ...

<button id="my-button" onclick="location.href='@Url.Action("YourActionName", "YourControllerName")'">Submit</button>

0

Puoi sempre giocare con htmlHelpers e creare alcune cose

    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);
        }
    }

E poi sulla vista chiamalo così

@Html.BtnWithAction("btnCaretakerBack", "Back", "btn btn-primary float-right", "Index", "Caretakers")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.