अशक्त बूलियन के लिए चेकबॉक्स


97

मेरे मॉडल में एक बूलियन है जिसे अशक्त होना पड़ता है

public bool? Foo
{
   get;
   set;
}

तो मेरे रेजर cshtml में मेरे पास है

@Html.CheckBoxFor(m => m.Foo)

सिवाय इसके कि काम नहीं करता। न ही इसे (बूल) के साथ डालना है। यदि मैं करता हूँ

@Html.CheckBoxFor(m => m.Foo.Value)

यह एक त्रुटि पैदा नहीं करता है, लेकिन यह मेरे मॉडल के लिए बाध्य नहीं है जब पोस्ट किया गया है और फू शून्य पर सेट है। पृष्ठ पर फू प्रदर्शित करने के लिए सबसे अच्छा तरीका है और यह एक पोस्ट पर मेरे मॉडल के लिए बाध्य है?



2
वह धागा इस मुद्दे को नजरअंदाज करता है, कि मुझे 3 मान के रूप में अशक्त का पता लगाने में सक्षम होना चाहिए। चेकबॉक्स के साथ एक फॉर्म सबमिट अनचेक किया गया और एक फॉर्म सबमिशन जहाँ चेकबॉक्स प्रदर्शित नहीं किया गया था, दो अलग-अलग परिदृश्य हैं जिनके लिए जिम्मेदार होना चाहिए।
DMulligan

जवाबों:


107

मुझे इसके साथ काम करने का मौका मिला

@Html.EditorFor(model => model.Foo) 

और फिर मेरे EditorTemplates फ़ोल्डर में एक Boolean.cshtml बनाना और चिपके रहना

@model bool?

@Html.CheckBox("", Model.GetValueOrDefault())

के भीतर।


2
मेरे लिये कार्य करता है। धन्यवाद!
शमूएल

1
नल बूलियन प्रकार के साथ काम करते हुए, मैं इस '' '@ Html.CheckBoxFor (एम => m.Foo.HasValue)' '' का इस्तेमाल किया
गौरव Aroraa

9
@ गौरवकुमार अरोरा आप अशक्त HasValueसंपत्ति के लिए एक चेकबॉक्स बना रहे हैं, लेकिन वास्तविक बूलियन मूल्य नहीं। अगर अंतर्निहित मूल्य की परवाह किए बिना यह एक चेकबॉक्स बनाएगा। यदि अशक्त का मूल्य है, तो यह हमेशा सत्य होगा।
स्वर्इर्स

1
यह निश्चित रूप से इस पृष्ठ का बहुत साफ और लचीला समाधान है। +1
टी-मोटिव

2
बस एक नोट: 1. आपको इस फाइल को "व्यूज / शेयर्ड / एडिटरटेम्पलेट्स" में स्टोर करना है। 2. आपको इस फाइल का नाम "Boolean.cshtml"
रखना है

46

समान प्रश्न में मिला जवाब - चेकबॉक्स में चिह्न लगाएं प्रतिपादन Nullable बूल । यह बहुत सीधा और सिर्फ काम है:

@Html.CheckBox("RFP.DatesFlexible", Model.RFP.DatesFlexible ?? false)
@Html.Label("RFP.DatesFlexible", "My Dates are Flexible")

यह @afinkelstein से स्वीकृत उत्तर की तरह है, सिवाय इसके कि हमें विशेष 'एडिटर टेम्पलेट' की आवश्यकता नहीं है


1
स्वीकृत उत्तर पर इसका अन्य लाभ यह है कि आप यह तय कर सकते हैं कि किसी मामले के आधार पर शून्य सही या गलत होना चाहिए, क्योंकि आपके आवेदन का तर्क तय होता है, बजाय पूरे आवेदन में एक डिफ़ॉल्ट होने के या (दो संपादक बनाने का)। टेम्पलेट्स!)।
क्रिसफॉक्स

25

मेरे पास bool? IsDisabled { get; set; }मॉडल है। यदि दृश्य में डाला गया है।

<div class="inputClass" id="disabled">
    <div>
    @if(Model.IsDisabled==null)
    {
        Model.IsDisabled = false;
    }           
    @Html.CheckBoxFor(model => model.IsDisabled.Value)         
    </div>
</div> 

1
बहुत अच्छा नहीं है क्योंकि आप मॉडल में मूल्य बदलते हैं और कई मामलों में, झूठा शून्य के बराबर नहीं है। मैंने आपको एक बिंदु दिया क्योंकि यह एक अच्छी कोशिश है। ध्यान दें कि मैं डारिन के साथ भी सहमत हूं :)
शमूएल

7
एक बिंदु देने के खिलाफ अनुशंसा करें क्योंकि यह एक अच्छी कोशिश है क्योंकि यह गलत तरीके से अन्य पाठकों को संकेत दे सकता है कि समस्या होने पर उत्तर उपयोगी है।
क्रिस

एक बेहतर दिखने वाला विकल्प बूलियन को नियंत्रक में झूठे सेट करना है यदि पृष्ठ को प्रस्तुत करने से पहले शून्य है, लेकिन फिर भी .Value विचार का उपयोग करें।
ग्राहम लाट

15

मेरे मॉडल में एक बूलियन है जिसे अशक्त होना पड़ता है

क्यों? इसका कोई मतलब नहीं है। एक चेकबॉक्स में दो अवस्थाएँ होती हैं: चेक / अनचेक, या यदि आप चाहें तो सही / गलत। कोई तीसरा राज्य नहीं है।

या प्रतीक्षा करें कि आप अपने डोमेन मॉडल का उपयोग दृश्य मॉडल के बजाय अपने विचारों में कर रहे हैं? यह तुम्हारी समस्या है। तो मेरे लिए समाधान एक दृश्य मॉडल का उपयोग करना है जिसमें आप एक साधारण बूलियन संपत्ति को परिभाषित करेंगे:

public class MyViewModel
{
    public bool Foo { get; set; }
}

और अब आपके पास आपका कंट्रोलर एक्शन इस व्यू मॉडल को देखने के लिए पास करेगा और उचित चेकबॉक्स उत्पन्न करेगा।


26
अलग-अलग कारणों के असंख्य कारण हैं कि पृष्ठ पर foo इनपुट दिखाई नहीं दे सकता है। अगर ऐसा लगता है कि मैं मान सकता हूं कि कोई मूल्य है, लेकिन मुझे इस बात के बीच अंतर करने में सक्षम होना चाहिए कि मॉडल को फू के साथ कैसे अनियंत्रित किया गया है और जब फू को नहीं दिखाया गया है।
DMulligan

@Kulligan, आपके दृश्य मॉडल पर एक और बूलियन संपत्ति सहित कैसे इंगित करता है कि क्या आपको फू संपत्ति के लिए एक चेकबॉक्स प्रस्तुत करना चाहिए और जिसे एक छिपे हुए क्षेत्र में संग्रहीत किया जा सकता है ताकि जब आप पोस्टबैक करें तो आपको पता चलेगा कि आपको फू मूल्य का ध्यान रखना चाहिए या नहीं या नहीं।
डारिन दिमित्रोव

मैंने मूल रूप से ऐसा किया था, लेकिन मुझे इन आदिम मूल्य प्रकारों के टन मिले जो विभिन्न कारणों से मेरे रूपों में शामिल हो सकते हैं या नहीं भी हो सकते हैं। उन सभी के लिए बूलियन जोड़ना मूर्खतापूर्ण लगने लगा। जब मैंने गुत्थमगुत्था किया तो मुझे लगा कि जाने का रास्ता है।
DMulligan

4
@KMulligan, आप हेल्पर्स, एडिटर टेम्प्लेट लिख सकते हैं, ... ताकि आपको ऐसी संपत्ति के लिए हर संपत्ति के लिए इसे दोहराना न पड़े।
डारिन दिमित्रोव

25
@DarinDimitrov, आपने विशिष्ट रूप से याद किया या इस तथ्य को नजरअंदाज कर दिया कि ओपी ने कहा कि उन्हें बूल के "अशक्त" पहलू का प्रतिनिधित्व करने में सक्षम होना चाहिए। आप इस तथ्य पर फ़िदा हो गए कि वह CheckBoxFor का उपयोग करना चाहता था। उसे बताने के बजाय उसने "खराब कोड" लिखा क्योंकि उसने अपने डोमेन मॉडल का उपयोग किया था (जो वह हो सकता है या नहीं हो सकता है) और उसे बता रहा है कि चेकबॉक्स या तो चेक किए गए हैं या अनियंत्रित हैं, आपको उसके प्रश्न का उत्तर देने का प्रयास करना चाहिए या जवाब नहीं देना चाहिए।
एंड्रयू स्टिट्ज

7

छिपे हुए क्षेत्रों के साथ एक आदिम की शिकायत करना यह स्पष्ट करने के लिए कि क्या गलत या अशक्त की सिफारिश नहीं की गई है।

चेकबॉक्स वह नहीं है जो आपको उपयोग करना चाहिए - यह वास्तव में केवल एक राज्य है: चेक किया गया । अन्यथा, यह कुछ भी हो सकता है।

जब आपका डेटाबेस फ़ील्ड एक अशक्त बूलियन ( bool?) होता है, तो UX को 3-रेडियो बटन का उपयोग करना चाहिए, जहां पहला बटन आपके "चेक किए गए" का प्रतिनिधित्व करता है, दूसरा बटन "Not Checked" का प्रतिनिधित्व करता है और तीसरा बटन आपके null का प्रतिनिधित्व करता है, जो भी शब्दार्थ अशक्त का अर्थ है। आप <select><option>रियल एस्टेट को बचाने के लिए एक ड्रॉप डाउन सूची का उपयोग कर सकते हैं , लेकिन उपयोगकर्ता को दो बार क्लिक करना होगा और विकल्प लगभग स्पष्ट रूप से स्पष्ट नहीं हैं।

  1     0      null 
True  False  Not Set
Yes   No     Undecided
Male  Female Unknown
On    Off    Not Detected

RadioButtonList, RadioButtonForSelectList नाम के एक्सटेंशन के रूप में परिभाषित किया गया है, आपके लिए चयनित / चेक वैल्यू सहित रेडियो बटन बनाता है, और सेट करता है <div class="RBxxxx">ताकि आप अपने रेडियो बटन को क्षैतिज (प्रदर्शन: इनलाइन-ब्लॉक), ऊर्ध्वाधर, या बनाने के लिए सीएसएस का उपयोग कर सकें एक टेबल फैशन में (प्रदर्शन: इनलाइन-ब्लॉक; चौड़ाई: 100 पीएक्स;)

मॉडल में (मैं शब्दकोश परिभाषा के लिए स्ट्रिंग, स्ट्रिंग का उपयोग कर रहा हूं। शैक्षणिक उदाहरण के रूप में। आप बूल का उपयोग कर सकते हैं ?, स्ट्रिंग)

public IEnumerable<SelectListItem> Sexsli { get; set; }
       SexDict = new Dictionary<string, string>()
        {
                { "M", "Male"},
                { "F", "Female" },
                { "U", "Undecided" },

        };

        //Convert the Dictionary Type into a SelectListItem Type
        Sexsli = SexDict.Select(k =>
              new SelectListItem
              {
                  Selected = (k.Key == "U"),
                  Text = k.Value,
                  Value = k.Key.ToString()
              });

<fieldset id="Gender">
<legend id="GenderLegend" title="Gender - Sex">I am a</legend>
    @Html.RadioButtonForSelectList(m => m.Sexsli, Model.Sexsli, "Sex") 
        @Html.ValidationMessageFor(m => m.Sexsli)
</fieldset>

public static class HtmlExtensions
{
public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    IEnumerable<SelectListItem> listOfValues,
    String rbClassName = "Horizontal")
{
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var sb = new StringBuilder();

if (listOfValues != null)
{
    // Create a radio button for each item in the list 
    foreach (SelectListItem item in listOfValues)
    {
        // Generate an id to be given to the radio button field 
        var id = string.Format("{0}_{1}", metaData.PropertyName, item.Value);

        // Create and populate a radio button using the existing html helpers 
        var label = htmlHelper.Label(id, HttpUtility.HtmlEncode(item.Text));

        var radio = String.Empty;

        if (item.Selected == true)
        {
            radio = htmlHelper.RadioButtonFor(expression, item.Value, new { id = id, @checked = "checked" }).ToHtmlString();
        }
        else
        {
            radio = htmlHelper.RadioButtonFor(expression, item.Value, new { id = id }).ToHtmlString();

        }// Create the html string to return to client browser
        // e.g. <input data-val="true" data-val-required="You must select an option" id="RB_1" name="RB" type="radio" value="1" /><label for="RB_1">Choice 1</label> 

        sb.AppendFormat("<div class=\"RB{2}\">{0}{1}</div>", radio, label, rbClassName);
    }
}

return MvcHtmlString.Create(sb.ToString());
}
}

4

मेरे लिए समाधान यह था कि मैं दृश्य मॉडल बदलूं। विचार करें कि आप चालान खोज रहे हैं। इन चालान का भुगतान किया जा सकता है या नहीं। इसलिए आपकी खोज के तीन विकल्प हैं: पेड, अनपेड या "आई डोंट केयर"।

मेरे पास यह मूल रूप से एक बूल के रूप में सेट था? मैदान:

public bool? PaidInvoices { get; set; }

इसने मुझे इस प्रश्न पर ठोकर मार दी। मैंने एक Enum टाइप बनाया और मैंने इसे इस प्रकार संभाला:

@Html.RadioButtonFor(m => m.PaidInvoices, PaidStatus.NotSpecified, new { @checked = true })
@Html.RadioButtonFor(m => m.PaidInvoices, PaidStatus.Yes) 
@Html.RadioButtonFor(m => m.PaidInvoices, PaidStatus.No)

बेशक मैंने उन्हें लेबलों में लपेटा था और पाठ निर्दिष्ट किया था, मेरा मतलब है कि यहां एक और विकल्प पर विचार करना है।


यह एक उपयोगी प्रतिनिधित्व है। यदि आपके पास सीमित स्थान है, तो आप इसे ड्रॉप-डाउन / चयन के साथ भी प्राप्त कर सकते हैं, सिवाय इसके कि एक विकल्प का चयन करने के लिए दो क्लिक करें। चयन के साथ, रेडियो बटन ब्राउज़रों के बीच बहुत अलग दिख सकते हैं, जो डिजाइनर-नरक हो सकते हैं।
सेवेज

4

चेकबॉक्स केवल आपको 2 मान (सही, गलत) प्रदान करता है। अशक्त बूलियन में 3 मान (सच्चे, झूठे, अशक्त) होते हैं इसलिए इसे चेकबॉक्स के साथ करना असंभव है।

एक अच्छा विकल्प इसके बजाय एक ड्रॉप डाउन का उपयोग करना है।

नमूना

public bool? myValue;
public List<SelectListItem> valueList;

नियंत्रक

model.valueList = new List<SelectListItem>();
model.valueList.Add(new SelectListItem() { Text = "", Value = "" });
model.valueList.Add(new SelectListItem() { Text = "Yes", Value = "true" });
model.valueList.Add(new SelectListItem() { Text = "No", Value = "false" });

राय

@Html.DropDownListFor(m => m.myValue, valueList)

1
यदि आप उपयोगकर्ता को सभी 3 संभावित मूल्यों को सेट करने में सक्षम होने के बारे में परवाह नहीं करते हैं, तो इससे कोई फर्क नहीं पड़ता कि आप सिर्फ एक चेकबॉक्स का उपयोग करके सभी 3 का प्रतिनिधित्व नहीं कर सकते।
डेव

@ मुझे लगता है कि आप इस बिंदु को पूरी तरह से याद कर रहे हैं। ओपी के पास एक बूल है? इसका मतलब है कि उसे 3 संभावित मूल्यों में से एक का चयन करने की आवश्यकता है। अगर वह केवल सच्चा या झूठ बोलना चाहता था, तो उसे एक बूल का उपयोग करना चाहिए न कि एक बूल का?
गुडराडाइन

1
वास्तव में, ओपी की टिप्पणी इसके विपरीत इंगित करती है - कि यदि फॉर्म में एक चेकबॉक्स है, तो वह अशक्त नहीं होना चाहता है कि ऑप्शन बिल्कुल भी नहीं है, क्योंकि चेकबॉक्स के साथ एक अलग फॉर्म होने पर वह विकल्प कवर किया जाता है।
डेव

मैंने एक खोज पृष्ठ में इसी रणनीति का उपयोग किया। आप अपनी खोज में हाँ, नहीं, या बूलियन की उपेक्षा कर सकते हैं। वहाँ है एक उपयोग के मामले! : D
जेस

4

मैं वास्तव में इसके लिए एक टेम्पलेट बनाऊंगा और उस टेम्पलेट का उपयोग EditorFor () के साथ करूंगा।

यहाँ देखें कि मैंने यह कैसे किया:

  1. मेरा टेम्पलेट बनाएँ, जो मूल रूप से एक आंशिक दृश्य है जिसे मैंने EditorTemplates निर्देशिका में बनाया है, साझा के तहत, दृश्य के तहत इसे नाम दें (उदाहरण के लिए) CheckboxTemplate:

    @using System.Globalization    
    @using System.Web.Mvc.Html    
    @model bool?
    
    @{
        bool? myModel = false;
        if (Model.HasValue)
        {
            myModel = Model.Value;
        }
    }
    
    <input type="checkbox" checked="@(myModel)" name="@ViewData.TemplateInfo.HtmlFieldPrefix" value="True" style="width:20px;" />
  2. इसका उपयोग इस तरह से करें (किसी भी दृष्टि से):

    @ Html.EditorFor (x => x.MyNullableBooleanCheckboxToBe, "CheckboxTemplate")

बस इतना ही।

MVC में टेम्प्लेट इतने शक्तिशाली होते हैं, उनका उपयोग करें .. आप एक पूरे पृष्ठ को एक टेम्पलेट के रूप में बना सकते हैं, जिसका आप उपयोग करेंगे @Html.EditorFor(); बशर्ते कि आप लैम्बडा एक्सप्रेशन में इसके व्यू मॉडल को पास करें ।।


3

मैं जिस स्वच्छ दृष्टिकोण के साथ आ सकता था, वह है विस्तार के लिए उपलब्ध एक्सटेंशन का विस्तार करना, HtmlHelperजबकि फ्रेमवर्क द्वारा प्रदान की गई कार्यक्षमता का पुन: उपयोग करना।

public static MvcHtmlString CheckBoxFor<T>(this HtmlHelper<T> htmlHelper, Expression<Func<T, bool?>> expression, IDictionary<string, object> htmlAttributes) {

    ModelMetadata modelMeta = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
    bool? value = (modelMeta.Model as bool?);

    string name = ExpressionHelper.GetExpressionText(expression);

    return htmlHelper.CheckBox(name, value ?? false, htmlAttributes);
}

मैंने अभिव्यक्ति को 'आकार देने' के साथ प्रयोग किया है ताकि मूल निवासी को सीधे गुजरने की अनुमति मिले CheckBoxFor<Expression<Func<T, bool>>>लेकिन मुझे नहीं लगता कि यह संभव है।


मुझे इसके लिए काम करने के लिए विधि के हस्ताक्षर को बदलना पड़ा: मैंने इसका इस्तेमाल किया public static MvcHtmlString CheckBoxFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, bool?>> expression, object htmlAttributes)और इसने अद्भुत काम किया।
पियरे-लुप पैग्निज

1

मेरा अतीत में भी ऐसा ही मुद्दा था।

HTML में एक चेकबॉक्स इनपुट बनाएं, और विशेषता नाम = "फू" सेट करें। यह अभी भी ठीक से पोस्ट होना चाहिए।

<input type="checkbox" name="Foo" checked="@model.Foo.Value" /> Foo Checkbox<br />

यह पोस्टिंग नहीं लगती है, मैं अभी भी अशक्त हो रहा हूं।
DMulligan

2
यह मॉडल बंधन के साथ समस्या हो सकती है
योएल हलब

0

बस शून्य मान की जाँच करें और इसके लिए गलत लौटें:

@{ bool nullableValue = ((Model.nullableValue == null) || (Model.nullableValue == false)) ? false : true; }
@Html.CheckBoxFor(model => nullableValue)

आप जानते हैं कि आपकी संपत्ति मेटाडेटा खो जाएगी, है ना? ग्राहक पक्ष सत्यापन, क्षेत्र का नाम और आईडी, आदि
टी-मोटि

0

मुझे भी इसी मुद्दे का सामना करना पड़ा। मैंने समस्या को हल करने के लिए निम्नलिखित दृष्टिकोण की कोशिश की क्योंकि मैं DB को बदलना नहीं चाहता और फिर से EDMX उत्पन्न करता हूं।

@{

   bool testVar = (Model.MYVar ? true : false);

 }

<label>@Html.CheckBoxFor(m => testVar)testVar</label><br />

0

एक मॉडल के लिए एक EditorTemplate बनाते समय जिसमें एक अशक्त बूल होता है ...

  • अशक्त बूल को 2 बूलियन में विभाजित करें:

    // Foo is still a nullable boolean.
    public bool? Foo 
    {
        get 
        { 
            if (FooIsNull)
                return null;
    
            return FooCheckbox;  
        }
        set
        {
            FooIsNull   = (value == null);
            FooCheckbox = (value ?? false);
        }
    }
    
    // These contain the value of Foo. Public only so they are visible in Razor views.
    public bool FooIsNull { get; set; }
    public bool FooCheckbox { get; set; }
  • संपादक टेम्पलेट के भीतर:

    @Html.HiddenFor(m => m.FooIsNull)
    
    @if (Model.FooIsNull)
    {
        // Null means "checkbox is hidden"
        @Html.HiddenFor(m => m.FooCheckbox)
    }
    else
    {
        @Html.CheckBoxFor(m => m.FooCheckbox)
    }
  • मूल संपत्ति फू को पोस्टबैक न करें, क्योंकि अब FooIsNull और FooCheckbox से गणना की जाती है।


0

उपरोक्त सभी उत्तर अपने स्वयं के मुद्दों के साथ आए। सबसे आसान / स्वच्छ तरीका IMO एक सहायक बनाना है

MVC5 रेज़र

App_Code / Helpers.cshtml

@helper CheckBoxFor(WebViewPage page, string propertyName, bool? value, string htmlAttributes = null)
{
    if (value == null)
    {
        <div class="checkbox-nullable">
            <input type="checkbox" @page.Html.Raw(htmlAttributes)>
        </div>
    }
    else if (value == true)
    {
        <input type="checkbox" value="true" @page.Html.Raw(htmlAttributes) checked>
    }
    else
    {
        <input type="checkbox" value="false" @page.Html.Raw(htmlAttributes)>
    }
}

प्रयोग

@Helpers.CheckBoxFor(this, "IsPaymentRecordOk", Model.IsPaymentRecordOk)

मेरे परिदृश्य में, एक अशक्त चेकबॉक्स का मतलब है कि एक स्टाफ सदस्य ने अभी तक ग्राहक से सवाल नहीं पूछा था, इसलिए यह एक लिपटे हुए है .checkbox-nullableताकि आप उचित रूप से स्टाइल कर सकें और अंतिम-उपयोगकर्ता की पहचान करने में मदद कर सकें कि यह न तो है trueऔर न हीfalse

सीएसएस

.checkbox-nullable {
    border: 1px solid red;
    padding: 3px;
    display: inline-block;
}

0

विस्तार के तरीके:

        public static MvcHtmlString CheckBoxFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, bool?>> expression)
        {
            return htmlHelper.CheckBoxFor<TModel>(expression, null);
        }
        public static MvcHtmlString CheckBoxFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, bool?>> expression, object htmlAttributes)
        {
            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
            bool? isChecked = null;
            if (metadata.Model != null)
            {
                bool modelChecked;
                if (Boolean.TryParse(metadata.Model.ToString(), out modelChecked))
                {
                    isChecked = modelChecked;
                }
            }
            return htmlHelper.CheckBox(ExpressionHelper.GetExpressionText(expression), isChecked??false ,  htmlAttributes);
        }

0

रेडियो बटन उपयोगी हैं, लेकिन वे आपको रद्द करने की अनुमति नहीं देते हैं । यदि आप इस व्यवहार को चाहते हैं, तो ड्रॉप-डाउन / चयन का उपयोग करने पर विचार करें। निम्नलिखित कोड उत्पन्न करेगा SelectListऔर यह एक अशक्त बूलियन को सफलतापूर्वक बांधता है:

public static SelectList GetBoolTriState()
{
    var items = new List<SelectListItem>
    {
        new SelectListItem {Value = "", Text = ""},
        new SelectListItem {Value = "True", Text = "Yes"},
        new SelectListItem {Value = "False", Text = "No"},
    };

    return new SelectList(items, "Value", "Text");
}



-4

यह एक पुराना प्रश्न है, और मौजूदा उत्तर अधिकांश विकल्पों का वर्णन करते हैं। लेकिन एक सरल विकल्प है, अगर आपके पास बूल है? आपके दृश्यमॉडल में, और आप अपने यूआई में अशक्त होने की परवाह नहीं करते हैं:

@Html.CheckBoxFor(m => m.boolValue ?? false);

2
क्या आपने यह कोशिश की? चूँकि xxxFor विधियाँ एक सदस्य की अभिव्यक्ति की अपेक्षा करती हैं इसलिए मैं अच्छे पैसे की शर्त लगाता हूँ कि यह रनटाइम विफलता उत्पन्न करेगा। यह लक्ष्य संपत्ति या क्षेत्र का निर्धारण करने की कोशिश कर रहा है, इस बिंदु पर कुछ भी मूल्यांकन नहीं कर रहा है।
जौघन

2
रन टाइम एरर "टेम्प्लेट का उपयोग केवल फील्ड एक्सेस, प्रॉपर्टी एक्सेस, सिंगल-डायमेंशन एरे इंडेक्स या सिंगल-पैरामीटर कस्टम इंडेक्स एक्सप्रेशंस के साथ किया जा सकता है।"
ePezhman
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.