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.