MVC Denetleyici ve Eylem yöntemini çağıran HTML düğmesi


206

Bunun doğru olmadığını biliyorum, ama illüstrasyon uğruna böyle bir şey yapmak istiyorum:

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

Amacım, MVC denetleyicimin eylem yöntemini çağıracak bir HTML düğmesi yapmak.


4
"Çağrı" tanımlayın. Bu, birkaç olasılığı adlandırmak için AJAX çağrısı, başka bir sayfaya bağlantı veya form gönderme anlamına gelebilir.
— Mart'ta

Yukarıdaki yanıtların çoğu zaten işe yaramış olabilir, maalesef hiçbiri benim için işe yaramadı. Burada başka bir Stackoverflow yazı yararlı bir cevap buldum ! Bana nokta net framework 4.7 mvc5 ve bootstrap sürüm 3 * ile ASP üzerinde çalıştı ve tabii ki Razor View. Sorunun asıl amacı, bir düğmeye benzeyen bir bağlantı göstermektir.
— Imran Faruqi

Yanıtlar:


265

İşlemi göndermek istemediğiniz sürece bir form kullanmaya gerek yoktur. Bir giriş düğmesi (gönderilmez) hile yapar.

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

1
Bu öneriyi bir form gerektirmediği için kullandım. Teşekkür ederim!
— Aaron Salazar

2
HtmlHelper gibi bir şey sarmak olabilirpublic 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
kodumda sonlandırılmamış dize sabit hatası veriyor
— Burak Karakuş

5
Bununla bir parametre geçmek istiyorsanız, kullanabilirsiniz<input type="button" value="Go Somewhere Else" onclick="location.href='<%: Url.Action("Action", "Controller", new { parameter1 = value1 }) %>'" />
— HowlinWulf

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

243

Ustura sözdizimi burada:

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

4
Hala düzgün düzgün vermedi IDE bir "belirsiz dize sabiti" hatası var. Buradan çözüm kullanmak zorunda kaldım: stackoverflow.com/a/16420877/410937
— atconway

1
@atconway - garip, bu cevabın tam olarak nasıl sunduğu benim için çalıştı. VS2013.
— ametren

6
@atconway - aynı hatayı aldı ancak değiştirilen etiketi olarak 'input'değiştirdi 'button've bu hatayı çözdü.
— Tony Stark

6
Parametreler ile <input type = "button" title = "Sil" değer = "D" onclick = "location.href = '@ Url.Action (" Sil "," filmler ", yeni {id = item.ID})' "/>
— Sandeep

benim durumumda sadece kullanarak <button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>hile
— Atiq Baqi

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

type = "düğme" sayfanın gönderilmesini engeller. bunun yerine eyleminizi gerçekleştirir.


16

Bunu dene:

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

Bu senin için işe yaramalı.


ayrıca bootstrap veya bunun gibi diğer css sınıflarını da kullanabilirsiniz: @ Html.ActionLink ("DisplayText", "Action", ["Controller"], routeValues: null, htmlAttributes: new {@ class = "btn btn-info btn-md ", style =" beyaz boşluk: normal "})
— Asaf

15

Url.Action'ı kullanarak url'yi bir denetleyici eylemine dönüştürmeyi belirtin, böylece aşağıdakilerden birini kullanabilirsiniz:

<form method="post" action="<%: Url.Action("About", "Home") %>">
   <input type="submit" value="Click me to go to /Home/About" />
</form>

veya:

<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

Formunuzu Razor'daki belirli bir denetleyiciye ve eylem yöntemine bu şekilde gönderebilirsiniz.

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

10

Yukarıdaki cevaplardan birkaçına dayanarak, bunu yapabilirsiniz:

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

6

HTML <button>öğesi yalnızca onu içeren forma geri gönderebilir.

Bu nedenle, eyleme POST olan bir form oluşturmanız ve ardından bir <button>veya <input type="submit" />forma koymanız gerekir .


5

"Sonlandırılmamış dize sabiti" olarak bir hata alıyorsanız, aşağıdaki ustura sözdizimini kullanın:

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

5

Onclick Metoduna rağmen, formasyonu aşağıdaki gibi de kullanabilirsiniz:

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

Bir HttpPost fiil özniteliğiyle bir eyleminiz varsa, bu daha iyi çalışır, web tarayıcılarının bu yıkıcı bağlantıları ziyaret etmesini durduracaktır (bu bilgi için Hector Correa'ya teşekkürler)
— Tahir Khalid

5

bu örneği kullansak iyi olur

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


4

Yani, Razor kullanıyorum ama bu her ikisini de kullanacak. Temelde bir bağlantıya bir düğme sarıyorum.

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


3

Bu örneği kullanın:

<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

Ana sayfadaysanız ("/ Ana Sayfa / Dizin") ve Yönetici denetleyicisinin Dizin işlemini çağırmak istiyorsanız, aşağıdakiler sizin için çalışır.

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

1

bu örneği kullansak iyi olur .

Eylemi ve denetleyiciyi aşağıdakileri kullanarak arayın ActionLink:

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

0

Tamam, temelde eylemi düğmeye geçirmeniz ve tıklama gerçekleştiğinde çağırmanız, bir içinden olması gerekmiyor , düğme tıklandığında tetiklemek için HTML onclickon düğmesini kullanabilirsiniz ...

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

0

Her zaman htmlHelpers ile oynayabilir ve bazı şeyler oluşturabilirsiniz

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

Ve sonra görünümde şöyle deyin

@Html.BtnWithAction("btnCaretakerBack", "Back", "btn btn-primary float-right", "Index", "Caretakers")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.