एमवीसी में एचटीएमएलहेल्पर का उपयोग करने के लिए आपको कस्टम आईडी कैसे मिलती है

पूर्वावलोकन 4 का उपयोग करना nofollow noreferrer "> एएसपी.नेट एमवीसी कोड जैसे:

<%= Html.CheckBox( "myCheckBox", "Click Here", "True", false ) %>

केवल आउटपुट:

<input type="checkbox"  value="True"  name="myCheckBox"  />

फॉर्म पोस्ट के लिए वहां name है लेकिन जावास्क्रिप्ट या लेबल के लिए कोई id नहीं है :-(

मैं उम्मीद कर रहा था कि इसे बदल रहा है:

Html.CheckBox( "myCheckBox", "Click Here", 
               "True", false, new { id="myCheckBox" } )

काम करेगा - लेकिन इसके बजाय मुझे एक अपवाद मिलता है:

System.ArgumentException: An item with the same key has already been added.

जैसे कि कहीं से कहीं भी एक संग्रह में एक आईडी थी - मैं फंस गया हूँ!

रुचि रखने वाले किसी के लिए पूर्ण अपवाद निम्नानुसार है (हे - यहां फाइलों को संलग्न करना अच्छा नहीं होगा):

System.ArgumentException: An item with the same key has already been added. 
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Web.Routing.RouteValueDictionary.Add(String key, Object value)
   at System.Web.Mvc.TagBuilder2.CreateInputTag(HtmlInputType inputType, String name, RouteValueDictionary attributes)
   at System.Web.Mvc.CheckBoxBuilder.CheckBox(String htmlName, RouteValueDictionary htmlAttributes)
   at System.Web.Mvc.CheckBoxBuilder.CheckBox(String htmlName, String text, String value, Boolean isChecked, RouteValueDictionary htmlAttributes)
   at System.Web.Mvc.CheckBoxExtensions.CheckBox(HtmlHelper helper, String htmlName, String text, String value, Boolean isChecked, Object htmlAttributes)
   at ASP.views_account_termsandconditions_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in c:\dev\myProject\Views\Account\Edit.ascx:line 108
0
ro fr bn

2 उत्तर

जाहिर है यह एक बग है। क्योंकि वे इसे संभावित प्रतिपादन मूल्यों में जोड़ रहे हैं, वे बस इसे शामिल करना भूल गए हैं। मैं codeplex पर एक बग बनाने की सिफारिश करता हूं, और स्रोत डाउनलोड करता हूं और अपनी आवश्यकताओं के लिए इसे संशोधित करता हूं।

0
जोड़ा

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

<%= Html.CheckBox("myCheckbox", "Click here", "True", false, new {_id ="test" })%>

किसी भी कीवर्ड के लिए आप विशेषता के नाम से पहले अंडरस्कोर का उपयोग कर सकते हैं। कक्षा के बजाय आप _class का उपयोग करें। चूंकि वर्ग सी # में एक कीवर्ड है, और HTML में विशेषता का नाम भी है। अब, "आईडी" सी # में कोई कीवर्ड नहीं है, लेकिन शायद यह किसी अन्य .NET भाषा में है जिसे वे समर्थन देना चाहते हैं। जो मैं बता सकता हूं, यह वीबी.नेट, एफ #, या रूबी में कोई कीवर्ड नहीं है, इसलिए शायद यह एक गलती है कि वे आपको इसके साथ अंडरस्कोर का उपयोग करने के लिए मजबूर करते हैं।

0
जोड़ा
मुझे नहीं पता कि यह दस्तावेज़ीकरण में है या नहीं। मुझे यह नहीं मिला। मुझे लगता है कि मैंने इसे फिल हैक्स के ब्लॉग पर पढ़ा है। साथ ही, मुझे लगता है कि उपसर्ग को अंडरस्कोर से @ में बदल दिया गया था, इसलिए अगर उपर्युक्त काम नहीं करता है तो "नया {@ id =" test "} आज़माएं।
जोड़ा लेखक Lance Fisher, स्रोत
दस्तावेज़ीकरण में यह कहां लिखा गया है?
जोड़ा लेखक Jeff Martin, स्रोत