कोई @ Html.Button नहीं है!


81

यह अजीब है। मैं वहाँ @ Html.Button () के लिए संदर्भ देख रहा हूं, लेकिन जब मैं टाइप करता हूं कि Intellisense को ऐसा हेल्पर नहीं मिलता है ... वहाँ ड्रॉपडेललिस्ट, हिडन, एडिटर्स, वगैरह, लेकिन कोई बटन नहीं है!

उसके साथ क्या है?


आप इस तरह के संदर्भ कहां देखते हैं?
SLACs 20

1
मैं निरंतरता की इच्छा को समझता हूं, लेकिन वास्तव में किसी के लिए कोई ज़रूरत नहीं है (कुछ भी नहीं करना है या इसके खिलाफ रक्षा नहीं करना है) इसलिए यह सब एक html टैग लिखने के लिए एक लंबा-चौड़ा तरीका है: '@ Html.Button ("myButton"), नया {@class = "myClass"}) 'बनाम' <बटन वर्ग = "myClass"> myButton </ बटन> '
नौ पूंछ 15

4
@Russel - मैं असहमत हूँ - मैंने MvcHtmlString पर विस्तार विधियाँ बनाई हैं, जिन्हें निष्क्रिय करने, आसानी से बनाने और DOM तत्वों को छिपाने के लिए। क्योंकि बटन के लिए कोई HTML सहायक नहीं है जो मैं अपने एक्सटेंशन विधियों का उपयोग नहीं कर सकता। कहने के लिए 'कोई ज़रूरत नहीं है' थोड़ा अदूरदर्शी और संभवतः भोला है।
बैरीपिकर

जवाबों:


69
public static class HtmlButtonExtension 
{

  public static MvcHtmlString Button(this HtmlHelper helper, 
                                     string innerHtml, 
                                     object htmlAttributes) 
  { 
    return Button(helper, innerHtml,
                  HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)
    ); 
  }

  public static MvcHtmlString Button(this HtmlHelper helper, 
                                     string innerHtml,
                                     IDictionary<string, object> htmlAttributes)
  {
      var builder = new TagBuilder("button");
      builder.InnerHtml = innerHtml;
      builder.MergeAttributes(htmlAttributes);
      return MvcHtmlString.Create(builder.ToString());
  }
}

1
हाँ ... उनके पास वास्तव में कुछ अच्छा कारण रहा होगा अन्यथा यह बहुत बड़ी गलती होगी।
आंद्रेई रोनेया

धन्यवाद, मैं एक नई परियोजना पर था और कोई html.button
टॉम

7
यदि आप @Html.Button("ButtonText", new {Name = "name", Value = "value" })प्रारूप का उपयोग करना चाहते हैं , तो इस वर्ग को जोड़ें:public static MvcHtmlString Button(this HtmlHelper helper, string text, object htmlAttributes) { return Button(helper, text, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); }
Mason240

1
अच्छी कॉल @ Mason240। जैसा कि आपने सुझाव दिया था, मैंने अपने उत्तर को एक अधिभार के साथ अद्यतन किया।
जेसेगैविन

वाह ... मैंने HtmlHelper.AnonymousObjectToHtmlAttributesपहले कभी कैसे नहीं देखा ?
drzaus

9

Mvc पूर्वावलोकन 3 (mvc3 नहीं) के रूप में कोई बटन सहायक नहीं है

यह उदाहरण के लिए अतीत में एक गुच्छा का उल्लेख किया गया था: http://blog.wekeroad.com/blog/aspnet-mvc-preview-using-the-mvc-ui-helpers/ हालांकि आपका खुद का रोल करना तुच्छ है - मेरे पास एक आधार है इसके लिए कहीं न कहीं इधर उधर मुझे इसे खोदना होगा, लेकिन अनिवार्य रूप से एक नया Html.ButtonFor बनाएं और Html.LabelFor से सोर्स कोड कॉपी करें और इनपुट टाइप = "बटन" टैग बनाने के लिए आउटपुट बदलें।


9

स्वीकृत उत्तर पर विस्तार करने के लिए , आप एक मॉडल संपत्ति के लिए एक सबमिट बटन को बांध सकते हैं, लेकिन अलग पाठ है:

@Html.ButtonFor(m => m.Action, Model.LabelForCurrentAction(), new { @class = "btn btn-primary btn-large", type = "submit" })

निम्नलिखित थोड़ा संशोधित Buttonसहायक वर्ग का उपयोग करना :

/// <summary>
/// Via /programming/5955571/theres-no-html-button
/// </summary>
public static class HtmlButtonExtension
{

    public static MvcHtmlString Button(this HtmlHelper helper, object innerHtml, object htmlAttributes)
    {
        return helper.Button(innerHtml, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
    }

    public static MvcHtmlString Button(this HtmlHelper helper, object innerHtml, IDictionary<string, object> htmlAttributes)
    {
        var builder = new TagBuilder("button") { InnerHtml = innerHtml.ToString() };
        builder.MergeAttributes(htmlAttributes);
        return MvcHtmlString.Create(builder.ToString());
    }

    public static MvcHtmlString ButtonFor<TModel, TField>(this HtmlHelper<TModel> html,
                                                        Expression<Func<TModel, TField>> property,
                                                        object innerHtml,
                                                        object htmlAttributes)
    {
        // lazily based on TextAreaFor

        var attrs = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);

        var name = ExpressionHelper.GetExpressionText(property);
        var metadata = ModelMetadata.FromLambdaExpression(property, html.ViewData);

        string fullName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);

        ModelState modelState;
        if (html.ViewData.ModelState.TryGetValue(fullName, out modelState) && modelState.Errors.Count > 0)
        {
            if( !attrs.ContainsKey("class") ) attrs["class"] = string.Empty;
            attrs["class"] += " " + HtmlHelper.ValidationInputCssClassName;
            attrs["class"] = attrs["class"].ToString().Trim();
        }
        var validation = html.GetUnobtrusiveValidationAttributes(name, metadata);
        if(null != validation) foreach(var v in validation) attrs.Add(v.Key, v.Value);

        string value;
        if (modelState != null && modelState.Value != null)
        {
            value = modelState.Value.AttemptedValue;
        }
        else if (metadata.Model != null)
        {
            value = metadata.Model.ToString();
        }
        else
        {
            value = String.Empty;
        }

        attrs["name"] = name;
        attrs["Value"] = value;
        return html.Button(innerHtml, attrs);
    }
}

8

MVC5, बूटस्ट्रैप ver 3.2.0

यह एक लिंक उत्पन्न करेगा जो एक बटन की तरह दिखता है।


2
"बूटस्ट्रैप 3" क्या है?
इकिस

1
मुझे क्षमा करें, मैंने गलत शब्द टाइप किया। बेशक, मेरा मतलब है बूटस्ट्रैप। थैंक यू। लिंक
पियोट नॉट

1
यह एक बटन नहीं बनाता है, इसके बजाय एक लिंक जो बटन की तरह दिखता है।
SMUsamaShah

2
मेरे लिए यह संकलित करने में विफल रहता है कि ओपनिंग कोष्ठक एक्शनलिंक के समान लाइन पर नहीं है।
GaTechThomas

GaTechThomas। हाँ यह सच हे। सब कुछ एक लाइन में होना चाहिए। मैंने इसे इस तरह से सुधार दिया कि पढ़ना आसान था। अपना खुद का बटन (या कुछ और) बनाना सबसे अच्छा है, लेकिन अगर आपके पास इसे करने का समय नहीं है या इसके स्वरूप के बारे में चिंतित नहीं हैं कि यह एक त्वरित समाधान है।
पिओट्र नॉट

1

रेज़र में "बटन" एचटीएमएल सहायक नहीं होता है। आपको कस्टम-निर्मित HTML सहायक एक्सटेंशन के संदर्भ मिलने की संभावना है।

यहां देखें: http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs


1
यह विचित्र नहीं लगता है? खासकर अगर यह तुच्छ है, तो इसे पूर्णता के लिए शामिल क्यों नहीं किया गया है ??
इकिस

मैं उस डॉक्टर के माध्यम से पढ़ा हूँ, लेकिन मैं यह काम नहीं कर सकता। मैंने प्रोजेक्ट के रूट में अपना हेल्पर HtmlHelpers.cs नामक फाइल में रखा है और इसमें एक स्टेटिक क्लास HtmlHelpers है जिसमें एक पब्लिक स्टेटिक मेथड है जो एक स्ट्रिंग देता है जिसका एकमात्र पैरामीटर "यह HtmlHelper हेल्पर" है। सब कुछ संकलित करता है और .Button Intellisense में दिखाई देना चाहिए, लेकिन यह नहीं है ... मुझे और क्या करना चाहिए?
इकिस

1
क्या आपने अपने दृश्य के शीर्ष पर अपने एक्सटेंशन नाम स्थान के लिए आयात विवरण शामिल किया था? यहाँ सामान्य मुद्दा है। आप अपने विचारों को संकलित करना सुनिश्चित कर सकते हैं (प्रोजेक्ट पर राइट क्लिक करें, अनलोड करें। फ़ाइल को संपादित करने के लिए राइट क्लिक करें - MvcBuildViews को सही पर सेट करें। सहेजें और बंद करें, और राइट क्लिक करें और प्रोजेक्ट को फिर से लोड करें और फिर से संकलित करें।
एंब्रॉयड साइपर - MSFT

1
एक्सटेंशन नामक एक फ़ोल्डर बनाएँ। htmlextensions.cs वर्ग को वहां जोड़ें (सुनिश्चित करें कि नाम स्थान सही है) और फिर आपके दृश्य उपयोग में: @use Yourapp.Extensions भी MvcBuildViews को नोटपैड का उपयोग करने में सक्षम करता है यदि आपके पास कोई समस्या है।
एडम ट्यूलिपर - MSFT

1
एककिस, निश्चित नहीं है कि आपने अपनी परियोजना के लिए क्या किया है, लेकिन आपको HtmlHelperExtension बनाने के लिए निम्न कार्य करने की आवश्यकता है: 1) एक स्थिर वर्ग बनाएं (मैं कॉल करता हूं HtmlHelperExtensions) 2) कक्षा के भीतर सार्वजनिक तरीके बनाते हैं, जिसे एक्सटेंशन कहा जाता है (एक्सटेंशन) )>, उचित हस्ताक्षर के साथ। 3) वापसी MvcHtmlString.Create ()। इस पोस्ट को एक उपयोगी और कार्यात्मक उदाहरण के लिए देखें: stackoverflow.com/questions/4896439/action-image-mvc3-razor
बेन फिंकेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.