2016-04-26 3 views
6

क्षमा करें, लेकिन मेरी अधिकांश खोज मुझे पुराने एमवीसी कोड पर ले जाती है। किसी भी तरह की सहायता को आभार समझेंगे।एमवीसी 6 में, चेकबॉक्स सूची को कोड में कैसे कोड करें और चेक किए गए मान को नियंत्रक को पास करें?

टैग सहायकों के साथ MVC 6 में

, तुम कैसे चेक बॉक्स का एक सेट कोड है: लेबल के लिए

  • उपयोग टैग सहायक तो क्लिक करने से वह जाँच की मूल्य
  • सहेजें (बाइंड?) की जाँच की मूल्य को चालू होगा IsOptionSelected संपत्ति को
  • जमा करें

क्लिक करने के बाद नियंत्रक को वापस इन जाँच की मान पास करें?

मैं लेबल के साथ चेकबॉक्स को सही ढंग से प्रदर्शित करने में सक्षम था, लेकिन मुझे नहीं पता कि चेक किए गए मानों को मॉडल के माध्यम से नियंत्रक को वापस कैसे पास किया जाए। अभी, IsOptionSelected मान वापस झूठ के रूप में वापस आ रहे हैं।

मैं लेबल काम के लिए एचटीएमएल सहायक बनाने में भी सक्षम था लेकिन टैग सहायक के लिए नहीं। मैं इन सभी गलत कोडिंग भी कर सकता हूं ताकि कोई सुझाव मदद मिले!

यहाँ मैं अब तक है:

प्रदर्शन:

Phone Options Checkboxes

निकाय:

public class PhoneOption 
{ 
    public bool IsOptionSelected { get; set; } = false; 
    public int OptionId { get; set; } 
    public string OptionName { get; set; } 
} 

मॉडल:

+०१२३५१६४१०
[Display(Name = "Phone Options")] 
public IEnumerable<PhoneOption> PhoneOptions { get; set; } 

. . . . 
PhoneOptions = repository.GetPhoneOptions(); 

भंडार:

public IEnumerable<PhoneOption> GetPhoneOptions() 
{ 
    IEnumerable<PhoneOption> options = new[] 
    { 
     new PhoneOption { OptionId = 1, OptionName = "Phone Case",  IsOptionSelected = false }, 
     new PhoneOption { OptionId = 2, OptionName = "Screen Protector", IsOptionSelected = false }, 
     new PhoneOption { OptionId = 3, OptionName = "Car Charger",  IsOptionSelected = false }, 
     new PhoneOption { OptionId = 4, OptionName = "Extra Cable",  IsOptionSelected = false } 
    }; 
    return options; 
} 

दृश्य:

<div class="form-group"> 
    <label class="control-label">Phone Options</label> 
    <div> 
     @foreach (var option in Model.PhoneOptions) 
     { 
      <div> 
       @{ string cbId = "PhoneOption_" + @option.OptionId; } 
       <input [email protected] type="checkbox" [email protected] [email protected] [email protected] /> 
       @Html.Label(@cbId.ToString(), @option.OptionName) 
       @*This is causing invalid operation exception*@ 
       @*<label [email protected]()>@option.OptionName</label>*@ 
       <span [email protected] class="text-danger" role="alert"></span> 
      </div> 
     } 
    </div>  
</div> 

अग्रिम धन्यवाद!

+0

मुझे लगता है कि एएसपी-फ़ॉर गलत तरीके से उपयोग किया जाता है। इनपुट में बदलें [email protected] को asp-for = "IsOptionSelected" के रूप में चुना गया है जो सुनिश्चित करेगा कि यह फ़ोनऑप्शन में सही संपत्ति से जुड़ा हुआ है। लेबल [email protected]() में एक ही चीज़ गलत है। टैग सहायक के लिए यहां ट्यूटोरियल देखें .http: //www.davepaquette.com/archive/2015/05/18/mvc6-select-tag -helper.aspx –

+0

सुझाव के लिए धन्यवाद, लेकिन एएसपी-के लिए बदलना = "IsOptionSelected" एक वाक्यविन्यास त्रुटि फेंक रहा है क्योंकि यह मुख्य मॉडल में नहीं है। यह मॉडल का हिस्सा है। फोन विकल्प विकल्प पुनरावृत्ति पुनरावृत्ति। asp-for = option.IsOptionSelected भी काम नहीं करेगा। और हाँ, मैंने पहले ही ट्यूटोरियल पढ़ा है लेकिन इसमें चेकबॉक्स सूची शामिल नहीं है जैसे कि मैं क्या करने की कोशिश कर रहा हूं। –

+1

आह मुझे मिल गया। इसे जांचें यदि यह http://stackoverflow.com/questions/15375800/model-binding-to-a-list-mvc-4 –

उत्तर

6

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

मॉडल:

public List<PhoneOption> PhoneOptions { get; set; } 
. . . 
PhoneOptions = repository.GetPhoneOptions().ToList(); 

देखें:

@if (@Model.PhoneOptions != null && @Model.PhoneOptions.Count() > 0) 
{ 
    for (int i = 0; i < @Model.PhoneOptions.Count(); i++) 
    { 
     <div> 
      <input asp-for="@Model.PhoneOptions[i].IsOptionSelected" type="checkbox" /> 
      <label asp-for="@Model.PhoneOptions[i].IsOptionSelected">@Model.PhoneOptions[i].OptionName</label> 

      @*If these are not included, all OptionIds become 0 and all OptionName becomes null*@ 
      @Html.HiddenFor(x => @Model.PhoneOptions[i].OptionId) 
      @Html.HiddenFor(y => @Model.PhoneOptions[i].OptionName) 
     </div> 
    }  
} 

मुझे आशा है कि यह किसी और जो एक ही चेकबॉक्स सूची संबंधी समस्याएं आ रही मदद करता है।

अद्यतन: मैंने उपरोक्त मददगार टैग करने के लिए HTML मददगार अपडेट किए हैं।

+1

खुशी है कि यह आपके लिए काम करता है। और आपके समाधान को पोस्ट करने के लिए धन्यवाद। –

+1

टैग सहायकों का उपयोग करना ठीक काम करना चाहिए - '<इनपुट asp-for = "मॉडल। फ़ोनऑप्शन [i] .इस विकल्प" टाइप = "चेकबॉक्स" /> 'जब तक आप' for 'लूप का उपयोग करते हैं और संग्रह' IList है '(' inumerable ' –

+0

धन्यवाद, @StephenMuecke! मैंने इसे आजमाया और यह थोड़ा बदलाव - '<इनपुट asp-for =" @ model.PhoneOptions [i] ISOptionSelected "type =" checkbox "id =" @cbId "/>'। मैं अभी भी लेबल के लिए टैग हेल्पर को चेकबॉक्स में "संलग्न" करने के लिए नहीं कर सकता हूं। यह दोनों: 1) '<लेबल asp-for =" @ model.PhoneOptions [i] IsOptionSelected "> @ मॉडल। फ़ोन विकल्प [i] .ऑपरनाम 'और 2)' <लेबल asp-for = "@ cbId"> @ मॉडल। फ़ोन विकल्प [i] .ऑप्शननाम 'चेकबॉक्स मान को टॉगल करने के लिए क्लिक करने योग्य नहीं हैं। यदि आप जानते हैं कि यह कितना अच्छा होगा! –

0

यह कैसे वाक्य रचना में होना चाहिए है अपने लिए प्रत्येक एएसपी-के लिए उद्धरण चिह्नों

@foreach (var option in Model.PhoneOptions) 
     { 
      <div> 
       @{ string cbId = "PhoneOption_" + @option.OptionId; } 
       <input asp-for="@option.IsOptionSelected" type="checkbox" value="@option.IsOptionSelected" id="@cbId" name="@cbId" /> 
       @Html.Label(@cbId.ToString(), @option.OptionName) 
       @*This is causing invalid operation exception*@ 
       @*<label asp-for="@cbId">@option.OptionName</label>*@ 
       <span asp-validation-for="@cbId" class="text-danger" role="alert"></span> 
      </div> 
     } 
+1

क्षमा करें, मैंने कोशिश की लेकिन IsOptionSelected मान अभी भी नियंत्रक में झूठी के रूप में पोस्ट कर रहे हैं, भले ही चेकबॉक्स चेक किए गए हों। –

संबंधित मुद्दे