ASP.NET MVC रूपों में चेकबॉक्स कैसे संभालें?


246

सावधानी: यह सवाल नौ साल से अधिक पुराना है!

आपका सबसे अच्छा विकल्प नए प्रश्नों की खोज करना है, या एमवीसी के अपने विशिष्ट संस्करण की तलाश में नीचे दिए गए उत्तरों की खोज करना है, क्योंकि यहां कई उत्तर अप्रचलित हैं।

यदि आपको कोई उत्तर मिलता है जो आपके संस्करण के लिए काम करता है, तो कृपया सुनिश्चित करें कि उत्तर में आपके द्वारा उपयोग किए जा रहे MVC का संस्करण है।
(मूल प्रश्न नीचे शुरू होता है)


यह मुझे थोड़ा विचित्र लगता है, लेकिन जहां तक ​​मैं बता सकता हूं, यह है कि आप इसे कैसे करते हैं।

मेरे पास वस्तुओं का एक संग्रह है, और मैं चाहता हूं कि उपयोगकर्ता उनमें से एक या अधिक का चयन करें। यह मेरे लिए "चेकबॉक्स के साथ फ़ॉर्म" कहता है। मेरी वस्तुओं में "चयनित" की कोई अवधारणा नहीं है (वे एक wcf कॉल deserializing द्वारा POCO का गठन किया है)। तो, मैं निम्नलिखित कार्य करता हूं:

public class SampleObject{
  public Guid Id {get;set;}
  public string Name {get;set;}
}

दृश्य में:

<%
    using (Html.BeginForm())
    {
%>
  <%foreach (var o in ViewData.Model) {%>
    <%=Html.CheckBox(o.Id)%>&nbsp;<%= o.Name %>
  <%}%>
  <input type="submit" value="Submit" />
<%}%>

और, नियंत्रक में, यह एकमात्र तरीका है जिससे मैं यह पता लगा सकता हूं कि उपयोगकर्ता ने किन वस्तुओं की जाँच की:

public ActionResult ThisLooksWeird(FormCollection result)
{
  var winnars = from x in result.AllKeys
          where result[x] != "false"
          select x;
  // yadda
}

पहली जगह में इसकी अजीब, और दूसरी बात, उपयोगकर्ता द्वारा जाँच की गई उन वस्तुओं के लिए, FormCollection केवल सही के बजाय "सही गलत" के रूप में इसके मूल्य को सूचीबद्ध करता है।

जाहिर है, मुझे कुछ याद आ रहा है। मुझे लगता है कि यह इस विचार को ध्यान में रखकर बनाया गया है कि संग्रह में जिन वस्तुओं पर html फॉर्म में काम किया जाता है वे UpdateModel()किसी मॉडलबिंडर के माध्यम से या उसके माध्यम से अपडेट की जाती हैं ।

लेकिन इसके लिए मेरी वस्तुओं की स्थापना नहीं की गई है; क्या इसका मतलब यह है कि यह एकमात्र तरीका है? क्या इसे करने का एक और तरीका है?


2
दूसरों को यह समाधान उपयोगी लग सकता है: stackoverflow.com/questions/3291501/…
हारून

जवाबों:


262

Html.CheckBox कुछ अजीब कर रही है - यदि आप परिणामी पृष्ठ पर स्रोत देखते हैं, तो आप देखेंगे कि <input type="hidden" />प्रत्येक चेकबॉक्स के साथ एक जेनरेट किया जा रहा है, जो आपको प्रत्येक प्रपत्र तत्व के लिए "सही गलत" मान बताता है।

यह कोशिश करो, जो निश्चित रूप से ASP.NET MVC बीटा पर काम करता है क्योंकि मैंने अभी-अभी इसकी कोशिश की है।

इसे Html.CheckBox () का उपयोग करने के बजाय दृश्य में रखें:

<% using (Html.BeginForm("ShowData", "Home")) {  %>
  <% foreach (var o in ViewData.Model) { %>
    <input type="checkbox" name="selectedObjects" value="<%=o.Id%>">
    <%= o.Name %>
  <%}%>
  <input type="submit" value="Submit" />
<%}%>

आपके चेकबॉक्स सभी कहलाते हैं selectedObjects, और valueप्रत्येक चेकबॉक्स संबंधित वस्तु का GUID है।

फिर निम्नलिखित नियंत्रक कार्रवाई (या कुछ इसी तरह के लिए प्रतिक्रिया के बजाय उपयोगी कुछ करता है पोस्ट)। ()

public ActionResult ShowData(Guid[] selectedObjects) {
    foreach (Guid guid in selectedObjects) {
        Response.Write(guid.ToString());
    }
    Response.End();
    return (new EmptyResult());
}

यह उदाहरण आपके द्वारा चेक किए गए बक्से के GUID को लिखेगा; ASP.NET MVC Guid[] selectedObjectsआपके लिए पैरामीटर में चयनित चेकबॉक्स के GUID मानों को मैप करता है , और यहां तक ​​कि अनुरोध से स्ट्रिंग को पार्स करता है। त्वरित संग्रह GUID ऑब्जेक्ट में संग्रह, जो मुझे लगता है कि बल्कि अच्छा है।


हाँ! यही मुझे अपने अनुप्रयोगों के लिए भी करना पड़ा है!
आदिप गुप्ता

70
WTF। नियंत्रण के रूप में SAME नाम के साथ छिपे हुए इनपुट फ़ील्ड। इसके ViewState 2.0!
सिमोन_वेर

3
यह 1.0 रिलीज में भी मौजूद है। जवाब देखें @ andrea-balducci ने प्रस्तुत किया जो आपको इससे निपटने का एक बुद्धिमान तरीका देता है। यदि चेकबॉक्स की जाँच नहीं की जाती है, तो प्राप्त किए गए पाठ को 'गलत झूठा' होना चाहिए - यह मस्तिष्क के मृत ब्राउज़रों के लिए एक अच्छा समाधान है ...
ब्रायन रेहबिन

77
आश्चर्य? WTF? छिपे हुए इनपुट का चेकबॉक्स के समान नाम है - यदि उसी नाम से चेकबॉक्स को चेक नहीं किया गया है, तो उसका मान पोस्ट नहीं किया गया है जबकि छिपे हुए का मूल्य पोस्ट किया गया है। पहली बार जब ब्राउज़र एक नामित तत्व का सामना करता है तो वह उस मूल्य का उपयोग करेगा और उसी नाम के साथ अन्य सभी तत्वों को अनदेखा करेगा। यह गारंटी देता है कि कोई मान सबमिट किया गया है: चेकबॉक्स चेक किया गया है, तो सत्य है (यदि यह छिपे हुए तत्व के ऊपर पाया गया है) और चेकबॉक्स अनचेक किया गया है तो गलत है (खाली चेकबॉक्स को नजरअंदाज कर दिया जाता है और छिपी हुई गिरावट वापस हो जाती है)। असली wtf किसी और ने इस ओर इशारा क्यों नहीं किया है।
नेरगा

19
@nerraga: आप गलत हैं: यह एक ही नाम के साथ कई फ़ॉर्म तत्व रखने के लिए वैध HTML है; और यदि हां, तो सभी तत्व पोस्ट किए गए हैं, और मुझे यकीन नहीं है कि वास्तव में आदेश परिभाषित किया गया है (हालांकि व्यवहार में बस पृष्ठ क्रम में होने की संभावना है)। मूल्य के रूप में "झूठे" शब्द का उपयोग करना कुछ भ्रामक है, इसलिए हाँ, यह एक डब्ल्यूटीएफ है - एक बेहतर, कम भ्रामक विकल्प "मौजूद" या डैश के समान कुछ अर्थहीन टोकन जैसा होता।
Eamon Nerbonne

95

HtmlHelper अनियंत्रित स्थिति के बारे में नियंत्रक को सूचित करने के लिए एक छिपा हुआ इनपुट जोड़ता है। तो सही जाँच की स्थिति है:

bool bChecked = form[key].Contains("true");

1
यह इस समस्या का सबसे आसान तरीका है और इसका उपयोग मैं हमेशा करता हूं। यह आपको ASP.NET MVCs व्यवहार के लिए सहायक विधियों और खाते का उपयोग करने की अनुमति देता है।
निक डेनियल्स

8
.. या जाँच नहीं किए जाने के मामले में: bool bChecked = form [key] .quals ("गलत"); कर रहा है। कोन्टेक्ट्स ("असत्य") विफल रहता है क्योंकि सही मूल्य "सत्य, असत्य" है।
मार्क रॉबिन्सन

54

यदि आप सोच रहे हैं कि वे एक छिपे हुए क्षेत्र को उसी नाम से चेकबॉक्स के रूप में रखते हैं जिसका कारण निम्नानुसार है:

सोर्सकोड MVCBetaSource \ MVC \ src \ MvcFutures \ Mvc \ ButtonsAndLinkExtensions.cs से टिप्पणी करें

<input type="hidden".../>चेकबॉक्स के लिए अतिरिक्त रेंडर करें । यह उन परिदृश्यों को दिखाता है जहाँ अनचेक किए गए चेकबॉक्स अनुरोध में नहीं भेजे गए हैं। छिपे हुए इनपुट को भेजना यह जानना संभव बनाता है कि चेकबॉक्स पृष्ठ पर मौजूद था जब अनुरोध सबमिट किया गया था।

मैं उन दृश्यों के पीछे अनुमान लगाता हूं जो उन्हें नियंत्रक कार्रवाई विधियों पर मापदंडों के लिए बाध्य करने के लिए यह जानने की आवश्यकता है। फिर आप एक त्रि-राज्य बूलियन मान सकते हैं (एक अशक्त बूल पैरामीटर के लिए)। मैंने इसकी कोशिश नहीं की है, लेकिन मैं यही उम्मीद कर रहा हूं कि उन्होंने क्या किया।


4
हाँ यह उन परिदृश्यों में उपयोगी है जहाँ आपने ग्रिड आदि को बंद कर दिया है और आप उस वस्तु को अचयनित करना चाहते हैं जिसे पहले किसी व्यावसायिक वस्तु में चुना गया था।
रिचर्ड जूल 31'09

49

आपको इसका उपयोग भी करना चाहिए <label for="checkbox1">Checkbox 1</label>क्योंकि तब लोग लेबल टेक्स्ट के साथ-साथ चेकबॉक्स पर भी क्लिक कर सकते हैं। इसकी शैली भी आसान है और कम से कम IE में यह तब हाइलाइट किया जाएगा जब आप पृष्ठ के नियंत्रणों के माध्यम से टैब करेंगे।

<%= Html.CheckBox("cbNewColors", true) %><label for="cbNewColors">New colors</label>

यह सिर्फ एक 'ओह मैं यह कर सकता है' नहीं है। इसका एक महत्वपूर्ण उपयोगकर्ता अनुभव वृद्धि है। भले ही सभी उपयोगकर्ताओं को पता न हो कि वे कई वसीयत के लेबल पर क्लिक कर सकते हैं।


27

मुझे आश्चर्य है कि इनमें से कोई भी उत्तर इसके लिए MVC सुविधाओं में निर्मित उपयोग नहीं किया गया है।

मैंने इस बारे में एक ब्लॉग पोस्ट लिखी है , जो वास्तव में लेबल को चेकबॉक्स से जोड़ता है। मैंने एक साफ और मॉड्यूलर तरीके से इसे पूरा करने के लिए EditorTemplate फ़ोल्डर का उपयोग किया ।

आप बस EditorTemplate फ़ोल्डर में एक नई फ़ाइल के साथ समाप्त होगा जो इस तरह दिखता है:

@model SampleObject

@Html.CheckBoxFor(m => m.IsChecked)
@Html.HiddenFor(m => m.Id)
@Html.LabelFor(m => m.IsChecked, Model.Id)

आपके वास्तविक विचार में, इसे लूप करने की कोई आवश्यकता नहीं होगी, बस कोड की 1 पंक्ति:

@Html.EditorFor(x => ViewData.Model)

अधिक जानकारी के लिए मेरे ब्लॉग पोस्ट पर जाएँ ।


1
धन्यवाद! एवरबॉय अभी भी पुराने रूपों के तरीकों का उपयोग कर रहे हैं। और जब आप सबमिट करते हैं तो आप इस सभी संग्रह के बिना मॉडल का उपयोग कर सकते हैं [और request.form कचरा - यह वही है जो मैं देख रहा था। +1और + बीयर
पियोट कुला

2
यह प्रश्न के लिए शीर्ष उत्तर होना चाहिए। बहुत सरल और लागू करने में आसान।
जोहान गुनवान

इससे पहले कि मुझे यह जवाब मिले, इसका एक सुरुचिपूर्ण समाधान खोजने के लिए कुछ समय तक संघर्ष किया। यह कुछ साल पुराना है लेकिन अभी भी 2016 में पूरी तरह से वैध है! यदि कई उदाहरणों में उपयोग किया जाता है, तो बिल्ट-इन SelectListItem का उपयोग एक सामान्य प्रकार के रूप में करें जो इसके लिए पूरी तरह से अनुकूल है
Phil

नमूना सूची एक सूची है? जैसे: @ModelType List (प्रकार की)
JoshYates1980

25

यहाँ मैं क्या कर रहा हूँ।

राय:


<input type="checkbox" name="applyChanges" />

नियंत्रक:


var checkBox = Request.Form["applyChanges"];

if (checkBox == "on")
{
...
}

मुझे एचटीएमएल मिला। * कुछ मामलों में सहायक तरीके इतने उपयोगी नहीं हैं, और मैं इसे सादे पुराने एचटीएमएल में करने से बेहतर था। यह उनमें से एक होने के नाते, दूसरा जो मन में आता है वह है रेडियो बटन।

संपादित करें: यह पूर्वावलोकन 5 पर है, जाहिर है संस्करणों के बीच YMMV।


1
मैं सिर्फ एक वैकल्पिक उदाहरण जोड़ना चाहता हूं: Object.Property =! String.IsNullOrEmpty (Request.Form ["NAME"]);
Gup3rSuR4c

अगर अनियंत्रित होता है, तो यह अपवाद पर जाता है
Xulfee

10

वे केवल पहले मूल्य को पढ़ने के लिए चुनते दिखाई देते हैं, इसलिए यह "सही" है जब चेकबॉक्स की जाँच की जाती है, और "झूठे" जब केवल छिपे हुए मूल्य को शामिल किया जाता है। इसे आसानी से कोड के साथ लाया जाता है:

model.Property = collection["ElementId"].ToLower().StartsWith("true");

8

@ डायलन बीट्टी बढ़िया लगाएं !!! मैं आपको बहुत धन्यवाद देता हूं। आगे भी विस्तार करने के लिए, यह तकनीक व्यू मॉडल दृष्टिकोण के साथ भी सही काम करती है। MVC बहुत अच्छा है, यह देखने के लिए बाध्य मॉडल ऑब्जेक्ट के एक ही नाम से एक संपत्ति के लिए एक सरणी बाँधने के लिए काफी स्मार्ट है। उदाहरण:

ViewModel:

public class SampleViewModel
{
    public IList<SampleObject> SampleObjectList { get; set; }
    public Guid[] SelectedObjectIds { get; set; }

    public class SampleObject
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }
}

राय:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Sample View</h2>
<table>
    <thead> 
        <tr>
            <th>Checked</th>
            <th>Object Name</th>
        </tr>
    </thead> 
<% using (Html.BeginForm()) %>
<%{%>                    
    <tbody>
        <% foreach (var item in Model.SampleObjectList)
           { %>
            <tr>
                <td><input type="checkbox" name="SelectedObjectIds" value="<%= item.Id%>" /></td>
                <td><%= Html.Encode(item.Name)%></td>
            </tr>
        <% } %>
    </tbody>
</table>
<input type="submit" value="Submit" />
<%}%>                    

नियंत्रक:

    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult SampleView(Guid id)
    {
        //Object to pass any input objects to the View Model Builder 
        BuilderIO viewModelBuilderInput = new BuilderIO();

        //The View Model Builder is a conglomerate of repositories and methods used to Construct a View Model out of Business Objects
        SampleViewModel viewModel = sampleViewModelBuilder.Build(viewModelBuilderInput);

        return View("SampleView", viewModel);
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult SampleView(SampleViewModel viewModel)
    {
        // The array of Guids successfully bound to the SelectedObjectIds property of the View Model!
        return View();
    }

मॉडल दर्शन से परिचित कोई भी व्यक्ति आनन्दित होगा, यह एक विजेता की तरह काम करेगा!


धन्यवाद, आपके नमूना दृश्यमॉडल ने मूल उत्तर में कुछ भ्रम को साफ किया।
पार्लियामेंट

6

मैं यह भी बताना चाहूंगा कि आप प्रत्येक चेकबॉक्स को एक अलग नाम दे सकते हैं, और उस नाम को एक्शनरेसस मापदंडों का हिस्सा बना सकते हैं।

उदाहरण,

राय:

 <%= Html.CheckBox("Rs232CheckBox", false, new { @id = "rs232" })%>RS-232

 <%= Html.CheckBox("Rs422CheckBox", false, new { @id = "rs422" })%>RS-422

नियंत्रक:

public ActionResults MyAction(bool Rs232CheckBox, bool Rs422CheckBox) {
    ...
}

दृश्य से मान कार्रवाई के लिए पारित किए जाते हैं क्योंकि नाम समान होते हैं।

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


5
<input type = "checkbox" name = "checkbox1" /> <label> Check to say hi.</label>

नियंत्रक से:

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(FormCollection fc)
    {

         var s = fc["checkbox1"];

         if (s == "on")
         {
             string x = "Hi";
         }
    }

4

यह मुद्दा रिलीज़ 1.0 में भी हो रहा है। Html.Checkbox () एक अन्य छिपे हुए फ़ील्ड को आपके मूल चेकबॉक्स के समान नाम / आईडी के साथ जोड़ने का कारण बनता है। और जैसा कि मैं दस्तावेज़ का उपयोग करके एक चेकबॉक्स सरणी को लोड करने की कोशिश कर रहा था। GetElemtentsByName (), आप अनुमान लगा सकते हैं कि कैसे चीजें गड़बड़ हो रही थीं। यह एक विचित्र है।


4

मैं क्या इकट्ठा कर सकता हूं, मॉडल यह अनुमान लगाना नहीं चाहता है कि चेक किया गया है = सही या गलत, मैंने इस तरह से फॉर्म सबमिट करने से पहले jQuery के साथ चेकबॉक्स तत्व पर एक मूल्य विशेषता सेट करके इसे प्राप्त किया:

 $('input[type="checkbox"]').each(function () {
       $(this).attr('value', $(this).is(':checked'));
 }); 

इस तरह, आपको चेकबॉक्स के मान को संग्रहीत करने के लिए एक छिपे हुए तत्व की आवश्यकता नहीं है।


4

मुझे पता है कि यह प्रश्न तब लिखा गया था जब MVC3 बाहर नहीं था, लेकिन जो कोई भी इस प्रश्न पर आता है और MVC3 का उपयोग कर रहा है, आप ऐसा करने के लिए "सही" तरीका चाहें।

जबकि मुझे लगता है कि पूरी कर रहा हूं

Contains("true");

बात बड़ी और साफ है, और सभी एमवीसी संस्करणों पर काम करता है, समस्या यह है कि यह संस्कृति को ध्यान में नहीं रखता है (जैसे कि यह वास्तव में एक मल के मामले में मायने रखता है)।

कम से कम MVC3 में एक बूल के मूल्य का पता लगाने का "सही" तरीका, वैल्यूप्रॉइडर का उपयोग करना है।

var value = (bool)ValueProvider.GetValue("key").ConvertTo(typeof(bool));

जब मैं अनुमतियाँ संपादित करता हूं तो मैं अपने ग्राहक की साइटों में से एक में ऐसा करता हूं:

var allPermissionsBase = Request.Params.AllKeys.Where(x => x.Contains("permission_")).ToList();
var allPermissions = new List<KeyValuePair<int, bool>>();

foreach (var key in allPermissionsBase)
{
     // Try to parse the key as int
     int keyAsInt;
     int.TryParse(key.Replace("permission_", ""), out keyAsInt);

     // Try to get the value as bool
     var value = (bool)ValueProvider.GetValue(key).ConvertTo(typeof(bool));
}

अब, इसका सौंदर्य यह है कि आप इसे किसी भी सरल प्रकार के साथ उपयोग कर सकते हैं, और यह संस्कृति के आधार पर सही भी होगा (धन, दशमलव, आदि के बारे में सोचें)।

ValueProvider वह है जिसका उपयोग तब किया जाता है जब आप इस तरह से अपने कार्य करते हैं:

public ActionResult UpdatePermissions(bool permission_1, bool permission_2)

लेकिन जब आप इन सूचियों को गतिशील रूप से बनाने और मूल्यों की जांच करने की कोशिश कर रहे हैं, तो आप संकलन समय पर आईडी को कभी नहीं जान पाएंगे, इसलिए आपको उन्हें मक्खी पर संसाधित करना होगा।


क्या आप विधि में फॉर्म-कॉलेक्शन पैरामीटर जोड़ने के बजाय Request.Params का उपयोग करने का कोई कारण है?
स्विस कोड

कोई कारण नहीं, मैं वास्तव में एक तरह से दूसरे पर कोई लाभ नहीं देखता।
दान वानविंकल

1
क्षमा करें, वास्तव में एक कारण है। बस मेरे कोड को देखा, और मैं 5 अलग-अलग कॉल के लिए इस एक विधि का उपयोग कर रहा हूं, और मुझे प्रत्येक विधि से फॉर्मकॉलिनेशन पास करने का मन नहीं था। यह कुछ भी पास करने की आवश्यकता के बिना चाबी प्राप्त करने का सबसे आसान तरीका था।
डैन वानविंकल

हाँ, मैं एमवीसी के लिए नया हूँ। और मैंने कहीं पढ़ा है कि Request.arams के बजाय FormCollection का उपयोग करना सामान्य रूप से बेहतर है, जैसे कि FormCollection के बजाय एक टाइप किए गए मॉडल का उपयोग करना (इसलिए वास्तव में किसी मॉडल का उपयोग करना और Request.Params का उपयोग करने से बचना सामान्य होगा)। मैंने देखा कि कोड की अन्य चीजों का उपयोग नहीं किया जाता है, जैसे ऑलपाइन्स चर और keyAsInt। जवाब के लिए धन्यवाद।
स्विसकोडर

3

ऐसा करने का सबसे आसान तरीका ...

आप नाम और मान सेट करें।

<input type="checkbox" name="selectedProducts" value="@item.ProductId" />@item.Name

फिर चेकबॉक्स के मानों को जमा करने और एक इंट सरणी में सेव करने पर। फिर उपयुक्त LinQ फ़ंक्शन। बस..

[HttpPost]
        public ActionResult Checkbox(int[] selectedObjects)
        {
            var selected = from x in selectedObjects
                           from y in db
                           where y.ObjectId == x
                           select y;                   

            return View(selected);
        }

3

Nautic20 के उत्तर के रूप में भी, बस ViewModel में स्ट्रिंग / int / enum की संग्रह संपत्ति के रूप में एक ही नाम के साथ MVC डिफ़ॉल्ट मॉडल बाइंडिंग चेकबॉक्स सूची का उपयोग करें। बस इतना ही।

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

मॉडल बाध्यकारी के लिए निम्नलिखित कोड काम करेगा:

 <% foreach (var item in Model.SampleObjectList)
       { %>
        <tr>
            <td><input type="checkbox" name="SelectedObjectIds" value="<%= item.Id%>" /></td>
            <td><%= Html.Encode(item.Name)%></td>
        </tr>
 <% } %>

निम्नलिखित कोड मॉडल के लिए बाध्यकारी नहीं होंगे (अंतर यह है कि इसे प्रत्येक चेकबॉक्स के लिए आईडी सौंपा गया है)

<% foreach (var item in Model.SampleObjectList)
       { %>
        <tr>
            <td><input type="checkbox" name="SelectedObjectIds" id="[some unique key]" value="<%= item.Id%>" /></td>
            <td><%= Html.Encode(item.Name)%></td>
        </tr>
<% } %>

जवाब के लिए धन्यवाद, लेकिन इस सवाल यह है कि juuuust थोड़ा पुराना है। छह साल पुराना है, के बारे में। आप MVC के कौन से संस्करण का उपयोग कर रहे हैं, इसे संपादित और निर्दिष्ट करना चाह सकते हैं । जो नए संस्करण का उपयोग करके किसी को भी इस उत्तर का पता लगाने में मदद करेगा।

मुझे भी वह पता हैं। यूनिक आईडी को हटाने से बहुत अधिक सिरदर्द और दांतों की
सूजन के

इस मुद्दे के लिए एमवीसी का संस्करण I .net MVC 4.0 का उपयोग कर रहा है।
चाइनाहेलो वर्ल्ड 15

2

यह वही है जो मैंने Html.CheckBox (...

Replace("true,false","true").Split(',')

4 बक्सों की जाँच के साथ, अनियंत्रित, अनियंत्रित, जाँच की गई कि यह सही, असत्य, असत्य, असत्य, सत्य, असत्य को सत्य, असत्य, असत्य, सत्य में बदल देता है। मुझे जिस चीज की जरूरत थी


0

इस जैसे किसी और के बारे में क्या राय है?

bool isChecked = false;
if (Boolean.TryParse(Request.Form.GetValues(”chkHuman”)[0], out isChecked) == false)
    ModelState.AddModelError(”chkHuman”, Nice try.”);

0

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

तो एक 'जाँच' या सच्चा परीक्षण होगा:

//looking for [true],[false]
bool isChecked = form.GetValues(key).Contains("true"); 

झूठी जाँच करना होगा:

//looking for [false],[false] or [false]
bool isNotChecked = !form.GetValues(key).Contains("true"); 

इस अंतर के GetValuesरूप में उपयोग करने के लिए मुख्य अंतर एक सरणी के रूप में है।


0

बस इस पर करते हैं $(document).ready:

$('input:hidden').each(function(el) {
    var that = $(this)[0];
    if(that.id.length < 1 ) {

        console.log(that.id);
        that.parentElement.removeChild(that);

    }
});

2
दुर्भाग्य से, आपको जावास्क्रिप्ट बंद होने वाले लोगों के लिए सर्वर साइड पर अजीब परिणाम मिल सकते हैं (NoScript प्लग-इन, पुराने मोबाइल फोन, लिंक्स ...)
ArIck

0

मेरा समाधान है:

<input type="checkbox"  id="IsNew-checkbox"  checked="checked" />     
<input type="hidden"  id="IsNew" name="IsNew" value="true"  />      
<script language="javascript" type="text/javascript" >     
  $('#IsNew-checkbox').click(function () {    
      if ($('#IsNew-checkbox').is(':checked')) {    
          $('#IsNew').val('true');    
      } else {    
          $('#IsNew').val('false');    
       }    
  });   
</script>  

अधिक आप यहां पा सकते हैं: http://www.blog.mieten.pl/2010/12/asp-net-mvc-custom-checkbox-as-solution-of-string-was-not-recognized-as-a- वैध-बूलियन /


आपको इसके लिए किसी भी जावास्क्रिप्ट का उपयोग करने की आवश्यकता नहीं है ... var isChecked = formData [कुंजी] .Contains ("true");
जैमर

0

मुझे लगभग एक ही समस्या थी लेकिन मेरे नियंत्रक का रिटर्न वैल्यू अन्य मूल्यों के साथ अवरुद्ध था।

एक सरल समाधान मिला, लेकिन यह थोड़ा मोटा लगता है।

Viewbag.अपने कंट्रोलर में टाइप करने की कोशिश करें और अब आप इसे एक नाम देंViewbag.Checkbool

अब दृश्य पर स्विच करें और इसे आज़माएं इसके @Viewbag.Checkboolसाथ आपको नियंत्रक से बाहर मूल्य मिलेगा।

मेरे नियंत्रक पैरामीटर इस तरह दिखते हैं:

public ActionResult Anzeigen(int productid = 90, bool islive = true)

और मेरा चेकबॉक्स इस तरह अपडेट होगा:

<input id="isLive" type="checkbox" checked="@ViewBag.Value" ONCLICK="window.location.href = '/MixCategory/Anzeigen?isLive=' + isLive.checked.toString()" />

0

@Mmacaulay का उपयोग करते हुए, मैं इसके लिए बूल लेकर आया:

// MVC Work around for checkboxes.
bool active = (Request.Form["active"] == "on");

यदि जाँच सक्रिय = सत्य है

यदि अनियंत्रित सक्रिय = गलत

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