मैं स्टीव सैंडर्सन के BeginCollectionItem सहायक का उपयोग कर रहा हूं और एक समस्या में भाग गया। मेरे पास एक ऐसा फॉर्म है जिसमें असीमित इनाम फ़ील्ड जोड़ने का विकल्प है। मैं अपने सहायक का उपयोग कर रहा हूं क्योंकि इस क्षेत्र को उत्पन्न करने के तरीके के साथ इस समस्या को हल किया गया है और फ़ॉर्म को जमा होने पर इसे बाध्य करने के बारे में चिंता करने की आवश्यकता नहीं है।स्टीव सैंडर्सन की BeginCollectionItem सहायक सही ढंग से बाध्य नहीं होगा
मेरे पास इस रूप में कुछ चेकबॉक्स हैं जो अज्ञात राशि है। पुरस्कारों के विपरीत इस के साथ अंतर अज्ञात राशि डेटाबेस कॉल के बाद जानी जाएगी और जब कोड को देखने के लिए जाना जाता है तब तक जाना जाएगा।
तो मेरी कोड इस
public class FrmVm
{
public Guid Id { get; set; }
public string Name { get; set; }
public bool Active { get; set; }
public IList<WarrantyFeaturesVm> WarrantyFeaturesVm { get; set; } // this is the checkbox ones.
public IList<RewardVms> RewardVms { get; set; } // this is the dyanmic one that I needed the helper for
public CbCreditCardFrmVm()
{
Active = true;
WarrantyFeaturesVm = new List<WarrantyFeaturesVm>();
RewardVms = new List<RewardVms>();
}
}
// view
@foreach (var tier in Model.RewardVms)
{
@Html.Partial("GenerateReward", tier) // in this partial view in the BeginCollectionItem
}
@foreach (var warranties in Model.WarrantyFeaturesVm)
{
using (Html.BeginCollectionItem("WarrantyFeaturesVm"))
{
<span>@warranties.Name:</span>
@Html.TextBoxFor(x => warranties.FeatureId)
@Html.CheckBoxFor(x => warranties.HasFeature)
}
}
मैं jQuery का उपयोग कर रहा serializeArray का उपयोग करके डेटा प्रस्तुत करने के लिए() की तरह दिखता है। जब यह सर्वर पर जाता है तो यह सभी गतिशील लोगों को सही ढंग से बांधता है और संग्रह में वारंटी को भी बांधता है (संग्रह गणना 1 है)। फिर भी यह वारंटी FeaturesVm के अंदर कुछ भी बाध्य नहीं करता है, सब कुछ डिफ़ॉल्ट के रूप में छोड़ दिया जाता है।
यदि मैं (Html.BeginCollectionItem("WarrantyFeaturesVm"))
का उपयोग कर हटा देता हूं तो यह संग्रह को भी बाध्य नहीं करेगा।
कोई भी जानता है कि यह संग्रह में कुछ भी बाध्यकारी क्यों नहीं है?
संपादित
// for loop (works)
<form method="post" id="" action="" class="ui-formwizard ui-helper-reset ui-widget ui-widget-content ui-corner-all" novalidate="novalidate">
<span id="" class="step ui-formwizard-content ui-helper-reset ui-corner-all" style="display: none;">
<input type="hidden" value="6aa20677-d367-4e2a-84f0-9fbe00deb191" name="WarrantyFeaturesVm[0].FeatureId" id="WarrantyFeaturesVm_0__FeatureId" data-val-required="The FeatureId field is required." data-val="true" class="ui-wizard-content ui-helper-reset ui-state-default"> <span>Purchase</span>
<input type="checkbox" value="true" name="WarrantyFeaturesVm[0].HasFeature" id="WarrantyFeaturesVm_0__HasFeature" data-val-required="The HasFeature field is required." data-val="true" class="ui-wizard-content ui-helper-reset ui-state-default"><input type="hidden" value="false" name="WarrantyFeaturesVm[0].HasFeature" class="ui-wizard-content ui-helper-reset ui-state-default">
</form>
//foreach loop beginItemCollection(does not work)
<form method="post" id="" action="" class="ui-formwizard ui-helper-reset ui-widget ui-widget-content ui-corner-all" novalidate="novalidate">
<span id="" class="step ui-formwizard-content ui-helper-reset ui-corner-all" style="display: inline;">
<input type="hidden" value="68ba9241-c409-4f4b-96da-cce13b127c1e" autocomplete="off" name="WarrantyFeaturesVm.index" class="ui-wizard-content ui-helper-reset ui-state-default">
<input type="hidden" value="6aa20677-d367-4e2a-84f0-9fbe00deb191" name="WarrantyFeaturesVm[68ba9241-c409-4f4b-96da-cce13b127c1e].war.FeatureId" id="WarrantyFeaturesVm_68ba9241-c409-4f4b-96da-cce13b127c1e__war_FeatureId" data-val-required="The FeatureId field is required." data-val="true" class="ui-wizard-content ui-helper-reset ui-state-default"> <span>Purchase</span>
<input type="checkbox" value="true" name="WarrantyFeaturesVm[68ba9241-c409-4f4b-96da-cce13b127c1e].war.HasFeature" id="WarrantyFeaturesVm_68ba9241-c409-4f4b-96da-cce13b127c1e__war_HasFeature" data-val-required="The HasFeature field is required." data-val="true" class="ui-wizard-content ui-helper-reset ui-state-default"><input type="hidden" value="false" name="WarrantyFeaturesVm[68ba9241-c409-4f4b-96da-cce13b127c1e].war.HasFeature" class="ui-wizard-content ui-helper-reset ui-state-default">
</span>
</form>
//for loop beginItemCollection (does not work)
<form method="post" id="" action="" class="ui-formwizard ui-helper-reset ui-widget ui-widget-content ui-corner-all" novalidate="novalidate">
<span id="" class="step ui-formwizard-content ui-helper-reset ui-corner-all" style="display: none;">
<input type="hidden" value="fe3fbc82-a2df-476d-a15a-dacd841df97e" autocomplete="off" name="WarrantyFeaturesVm.index" class="ui-wizard-content ui-helper-reset ui-state-default">
<input type="hidden" value="6aa20677-d367-4e2a-84f0-9fbe00deb191" name="WarrantyFeaturesVm[fe3fbc82-a2df-476d-a15a-dacd841df97e].WarrantyFeaturesVm[0].FeatureId" id="WarrantyFeaturesVm_fe3fbc82-a2df-476d-a15a-dacd841df97e__WarrantyFeaturesVm_0__FeatureId" data-val-required="The FeatureId field is required." data-val="true" class="ui-wizard-content ui-helper-reset ui-state-default"> <span>Purchase</span>
<input type="checkbox" value="true" name="WarrantyFeaturesVm[fe3fbc82-a2df-476d-a15a-dacd841df97e].WarrantyFeaturesVm[0].HasFeature" id="WarrantyFeaturesVm_fe3fbc82-a2df-476d-a15a-dacd841df97e__WarrantyFeaturesVm_0__HasFeature" data-val-required="The HasFeature field is required." data-val="true" class="ui-wizard-content ui-helper-reset ui-state-default"><input type="hidden" value="false" name="WarrantyFeaturesVm[fe3fbc82-a2df-476d-a15a-dacd841df97e].WarrantyFeaturesVm[0].HasFeature" class="ui-wizard-content ui-helper-reset ui-state-default">
</span>
<span id="adminSettings" class="step ui-formwizard-content ui-helper-reset ui-corner-all" style="display: inline;">
</form>
और आपकी फ़ोरैच वारंटी एचटीएमएल के अंदर है। बेगिनफॉर्म? क्या आप वॉरंटी के सेट के लिए कुछ नमूना HTML आउटपुट पोस्ट करना चाहते हैं? – danludwig
हां वे एक HTML.BeginForm में हैं। मुझे लगता है कि मैंने इसे समझ लिया (आंशिक रूप से)। अगर मैं फोरच लूप को फ़ोरलोप में बदलता हूं तो कुछ @ html.TextBoxFor (x => Model.WarrantyFeaturesVm [i]। FatureatureId) जैसे कुछ करता है। निश्चित नहीं है कि क्यों प्रारंभिक चयन काम नहीं कर रहा है। – chobo2
मॉडल बाइंडर एचटीएमएल को देखता है। 2 अलग-अलग मामलों में HTML आईडी को अलग-अलग कैसे प्रस्तुत किया जाता है, इस अंतर को देखें। हम BeginCollectionItem के साथ अक्सर foreach का उपयोग करते हैं, लेकिन अक्सर BeginCollectionItem आंशिक या संपादक टेम्पलेट में है। – danludwig