2013-02-16 9 views
6

मेरे पास रेडियोधर्तिसूची है कस्टम एडाप्टर काम करने के लिए, लेकिन यदि कोई उपयोगकर्ता डेटा बना देता है, और कोई डेटा पहले सबमिट नहीं किया गया है, तो रेडियो बटनों में से एक (पहले) हमेशा पूर्व निर्धारित किया जाता है, I इससे बचना चाहते हैं, मैं इसे कैसे प्राप्त कर सकता हूं?एएसपी.नेट एमवीसी रेडियोबटन लिस्टफोर हमेशा प्रीसेट

@Html.RadioButtonForSelectList(model => model.ViewModelForThingCreate.ThingTypeID, Model.ViewModelForCarCreate.CarTypeSelectList) 

और:

public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>(this HtmlHelper<TModel> HTMLHelper,Expression<Func<TModel, TProperty>> Expression, IEnumerable<SelectListItem> ListOfValues) 
     { 
      var MetaData = ModelMetadata.FromLambdaExpression(Expression, HTMLHelper.ViewData); 
      var SB = new StringBuilder(); 

      if (ListOfValues != null) 
      { 
       foreach (SelectListItem Item in ListOfValues) 
       { 
        var ID = string.Format("{0}_{1}", MetaData.PropertyName, Item.Value); 
        var Radio = HTMLHelper.RadioButtonFor(Expression, Item.Value, new { id = ID }).ToHtmlString(); 
        SB.AppendFormat("<label class=\"radio inline\" for=\"{0}\">{1} {2}</label>", ID, Radio, HttpUtility.HtmlEncode(Item.Text)); 
       } 
      } 
      return MvcHtmlString.Create(SB.ToString()); 
     } 

धन्यवाद!

+0

कैसे आप js उपयोग के बारे में लग रहा है? –

+1

यह हमेशा अंतिम उपाय है ... – Baconbeastnz

+0

डारिन से इस स्लिम रेडियो बटन सहायक को देखें http://stackoverflow.com/questions/9553408/custom-helper-for-generating-html-tags-for-radio-button-and -सॉसिटेड लेबल –

उत्तर

1

रेडियो बटनों का मूल्य के के सभी सेट करने का प्रयास मैं सिर्फ mvc3 टेम्पलेट में अपनी विधि की कोशिश की है और यह मेरे लिए अच्छा काम करने लगता है। असल में मैं कुछ मॉडल

public class IndexModel 
{ 
    public string ID; 
    public IEnumerable<SelectListItem> Elements; 
} 

फिर बनाया उदाहरण बनाया और भर दिया मान:

var model = new IndexModel() 
      { 
       ID = "a", 
       Elements = 
         new List<SelectListItem>() { 
                new SelectListItem() { Text = "test1", Value = "1"}, 
                new SelectListItem() { Text = "test2", Value = "2"}} 
      }; 

ध्यान में रखते हुए मैं का उपयोग किया है अपने विस्तार विधि

<form> 
@(Extensions.RadioButtonForSelectList(Html, x => x.ID, Model.Elements)) 
<button type="reset">Reset</button> 
</form> 

सभी शुरुआत के बाद बिल्कुल ठीक लग रहे हैं । फ़ील्ड लोड पर नहीं चुने जाते हैं और उन्हें "रीसेट" बटन दबाकर साफ़ कर दिया जाता है।

enter image description here

आप के रूप में मुझे यकीन है कि अगर मैं पूरी तरह से समझते आप क्या हासिल करना :-) कोशिश कर रहे हैं नहीं कर रहा हूँ कुछ और जानकारी दे सकते हैं

संपादित करें:

यहाँ मैदान में उदाहरण दिया गया है रेडियो बटन के एचटीएमएल। वे निश्चित रूप से शुरुआत में भरे नहीं हैं और यदि आप चाहते हैं कि उन्हें आवश्यक है लेकिन डिफ़ॉल्ट रूप से आप किसी भी रेडियो बटन को चुने बिना फॉर्म भेज सकते हैं। इसके अलावा आप दूसरे उदाहरण में चेक जोड़कर एक चेक कर सकते हैं। क्या आप क्लाइंट साइड पर कुछ जावास्क्रिप्ट का उपयोग कर रहे हैं? शायद यह इस दुष्प्रभाव का कारण बन रहा है? http://jsbin.com/isadun/1

MZ

2

यह आपके कस्टम सहायक है जो चेक किए गए बटन के साथ सेट है। इसे आज़माएं, मुझे लगता है कि यह सभी रेडियो बटन अनचेक करेगा।

public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>(this HtmlHelper<TModel> HTMLHelper,Expression<Func<TModel, TProperty>> Expression, IEnumerable<SelectListItem> ListOfValues) 
     { 
      var MetaData = ModelMetadata.FromLambdaExpression(Expression, HTMLHelper.ViewData); 
      var SB = new StringBuilder(); 

      if (ListOfValues != null) 
      { 
       foreach (SelectListItem Item in ListOfValues) 
       { 
        var ID = string.Format("{0}_{1}", MetaData.PropertyName, Item.Value); 
        var Radio = HTMLHelper.RadioButtonFor(Expression, Item.Value, new { id = ID }).ToHtmlString(); 
        SB.AppendFormat("<label class=\"radio inline\" checked="false" for=\"{0}\">{1} {2}</label>", ID, Radio, HttpUtility.HtmlEncode(Item.Text)); 
       } 
      } 
      return MvcHtmlString.Create(SB.ToString()); 
     } 
+0

धन्यवाद लेकिन अरे यह काम नहीं करता है :(! अजीब! – Baconbeastnz

+1

अरे! लेमे एक और दृष्टिकोण के बारे में सोचते हैं –

+1

@ बेकनबेस्टन्ज़, एकमात्र अन्य चीज जो मैं सोच सकता हूं वह जेएस है। लेकिन ओउ जो गलत लगता है –

1

दुर्भाग्य से एक रेडियो बटन हमेशा जांचना चाहिए। रेडियो बटन के बारे में यह दुर्भाग्यपूर्ण हिस्सा है; हालांकि, आप हमेशा अपने फॉर्म में एक छिपा रेडियो बटन जोड़ सकते हैं और चेक की गई संपत्ति को सत्य पर सेट कर सकते हैं; क्या आपका आंतरिक कोड शून्य से स्वीकार करता है या जो भी आप उम्मीद करते हैं उससे कुछ भी नहीं चुना जाता है।

अनियंत्रित या गलत

foreach(button in ButtonGroup){ 
button.checked = false; 
} 
+0

एक रेडियो बटन हमेशा जांचना चाहिए? यह सही नहीं हो सकता है, निश्चित रूप से? – Baconbeastnz

+0

रेडियो बटनों को एक को सत्य होने की आवश्यकता होती है क्योंकि इन्हें उपयोगकर्ता को चयनों में से किसी एक को चुनने के लिए मजबूर करने के लिए उपयोग किया जाता है। यदि आपने चेकबॉक्स का उपयोग किया था और जेएस कोड था जो किसी अन्य बॉक्स को अक्षम करता है तो एक को चुना जाता है तो आप सभी को झूठी के रूप में चिह्नित किया जा सकता है। यदि आपको कोई नहीं चुना गया है तो यह बेहतर कार्यान्वयन हो सकता है। – Robert

+0

मैं प्रारंभिक स्थिति के बारे में बात कर रहा हूं। मुझे यकीन है कि आप उन्हें आंशिक रूप से अचयनित कर सकते हैं। वैसे भी – Baconbeastnz