HTML बटन एक एमवीसी नियंत्रक और एक्शन विधि कहलाता है


204

मुझे पता है कि यह सही नहीं है, लेकिन उदाहरण के लिए मैं ऐसा कुछ करना चाहूंगा:

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

मेरा लक्ष्य एक HTML बटन बनाना है जो मेरे MVC नियंत्रक की क्रिया विधि को कॉल करेगा।


4
परिभाषित करें "कॉल।" इसका मतलब कुछ संभावनाओं को नाम देने के लिए AJAX कॉल, दूसरे पेज का लिंक या फॉर्म पोस्ट करना हो सकता है।
डीवेव

ऊपर दिए गए अधिकांश उत्तर पहले से ही काम कर सकते हैं, दुर्भाग्य से मेरे लिए कोई भी काम नहीं किया। मुझे यहाँ एक और स्टाकेवरफ्लो पोस्ट से उपयोगी उत्तर मिला ! इसने मेरे लिए ASP पर डॉट नेट फ्रेमवर्क 4.7 mvc5 और बूटस्ट्रैप वर्जन 3. * के साथ काम किया और बेशक रेजर व्यू में। सवाल का मुख्य उद्देश्य जैसा कि मैं मानता हूं कि एक लिंक है जो एक बटन की तरह दिखता है।
इमरान फारुकी

जवाबों:


264

जब तक आप कार्रवाई पर पोस्ट नहीं करना चाहते, तब तक आपको फॉर्म का उपयोग करने की कोई आवश्यकता नहीं है। एक इनपुट बटन (सबमिट नहीं) ट्रिक करेगा।

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

1
मैंने इस सुझाव का उपयोग किया, क्योंकि इसके लिए फॉर्म की आवश्यकता नहीं है। धन्यवाद!
हारून सलाजार

2
इसे HtmlHelper में कुछ इस तरह से लपेट सकते हैं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)); }
Menahem

11
यह मेरे कोड में असंगत स्ट्रिंग को लगातार त्रुटि देता है
बुरक करकुस

5
यदि आप इसके साथ एक पैरामीटर पास करना चाहते हैं, तो आप उपयोग कर सकते हैं<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

242

रेज़र सिंटैक्स यहाँ है:

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

4
मुझे अभी भी IDE में एक "अनटेरिमेंटेड स्ट्रिंग कॉन्स्टैंट" त्रुटि मिली, जो अभी भी ठीक से प्रस्तुत नहीं हुई थी। : मैं यहाँ समाधान से इस्तेमाल किया था stackoverflow.com/a/16420877/410937
atconway

1
@atconway - अजीब बात है, यह मेरे लिए बिल्कुल काम करता है कि यह उत्तर इसे कैसे प्रस्तुत करता है। VS2013।
13

6
@atconway - एक ही त्रुटि थी लेकिन से टैग बदल बदल 'input'करने के लिए 'button'और कहा कि त्रुटि संकल्प लिया।
टोनी स्टार्क

6
पैरामीटर्स के साथ <इनपुट प्रकार = "बटन" शीर्षक = "हटाएं" मान = "डी" onclick = "location.href = '@ Url.Action (" हटाएं "," फिल्में ", नया {आईडी = item.ID}) "/>
संदीप

मेरे मामले में बस <button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("action", "controller")'" >Go Somewhere Else</button>चाल का उपयोग किया
Atiq Baqi

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

प्रकार = "बटन" पृष्ठ को सबमिट करने से रोकता है। इसके बजाय यह आपकी कार्रवाई करता है।


16

इसे इस्तेमाल करे:

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

यह आपके लिए काम करना चाहिए।


आप बूटस्ट्रैप या इस तरह के अन्य सीएसएस वर्गों का उपयोग भी कर सकते हैं: @ Html.ActionLink ("DisplayText", "Action", ["Controller"], pathValues: null, htmlAttributes: new {class = "btn btn-info btn-mdn-md ", शैली =" सफेद-स्थान: सामान्य "})
आसफ

15

आप एक नियंत्रक क्रिया के लिए url उत्पन्न करने के लिए Url.Action का उपयोग कर सकते हैं, इसलिए आप निम्न में से किसी एक का उपयोग कर सकते हैं:

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

या:

<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

यह आप रेजर में एक विशिष्ट नियंत्रक और एक्शन विधि के लिए अपना फॉर्म जमा कर सकते हैं।

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

10

उपरोक्त उत्तरों में से कुछ पर निर्माण, आप ऐसा कर सकते हैं:

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

6

HTML <button>एलिमेंट केवल उस फॉर्म को पोस्टबैक कर सकता है जिसमें वह है।

इसलिए, आप एक रूप है कि कार्रवाई करने के लिए पोस्ट है, तो एक डाल करने की जरूरत है <button>या <input type="submit" />रूप में।


5

यदि आपको "बिना तार के स्थिर" के रूप में कोई त्रुटि मिल रही है, तो निम्न रेजर सिंटैक्स का उपयोग करें:

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


4

इसलिए, मैं रेजर का उपयोग कर रहा हूं लेकिन यह या तो काम करेगा। मैं मूल रूप से एक लिंक में एक बटन लपेट रहा हूं।

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

4

जब आप नियंत्रक में कार्रवाई को लागू करते हैं, तो उपयोग करें

return View("Index");

या

return RedirectToAction("Index");

जहां Index.cshtml (या पेज जो कार्रवाई उत्पन्न करता है) पृष्ठ पहले से ही परिभाषित है। अन्यथा आप संभावित रूप से "दृश्य या इसके स्वामी को नहीं ढूंढ पाए गए ..." त्रुटि का सामना कर रहे हैं।

स्रोत: https://blogs.msdn.microsoft.com/aspnetue/2010/09/17/best-practices-for-asp-net-mvc/


4

Onclick Method के बावजूद आप formation का उपयोग इस प्रकार कर सकते हैं:

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

यह बेहतर काम करता है यदि आपके पास एक HttpPost क्रिया विशेषता के साथ एक क्रिया है, तो यह वेब क्रॉलर को उन विनाशकारी लिंक (इस जानकारी के लिए हेक्टर कोरी के लिए धन्यवाद) पर जाने से रोक देगा
ताहिर खालिद

3

इस उदाहरण का उपयोग करें:

<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

यदि आप होम पेज ("/ होम / इंडेक्स") में हैं और आप एडमिन कंट्रोलर की इंडेक्स कार्रवाई को कॉल करना चाहेंगे, तो निम्नलिखित आपके लिए काम करेगा।

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

1

बेहतर है कि इस उदाहरण का उपयोग करें

कॉल एक्शन और कंट्रोलर का उपयोग करके ActionLink:

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

0

ठीक है, आप मूल रूप से बटन के लिए कार्रवाई गुजरती हैं और इसे कहते जब क्लिक होता है, इसमें से एक के अंदर होने की जरूरत नहीं है कर सकते हैं HTML का उपयोग की जरूरत है, तो आप onclickपर बटन जब यह गति प्रदान करने के लिए बटन क्लिक किया ...

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

0

आप हमेशा htmlHelpers के साथ खेल सकते हैं और कुछ सामान बना सकते हैं

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

और फिर दृश्य पर इसे इस तरह से कॉल करें

@Html.BtnWithAction("btnCaretakerBack", "Back", "btn btn-primary float-right", "Index", "Caretakers")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.