दिलचस्प पोस्ट
जांच करें कि क्या अप्रबंधित DLL 32-बिट या 64-बिट है? jQuery के स्क्रोल () उपयोगकर्ता को स्क्रॉल करने से रोकते हुए पता लगा है विंडोज बैच फ़ाइल चल रहा है अतुल्यकालिक MessageDialog ShowAsync दूसरे संवाद पर एक्सेसडेडेड अपवाद फेंकता है जाओ – पार्सिंग की तारीख / समय स्ट्रिंग जो 'मानक' स्वरूप नहीं हैं नए बाह्य भंडारण ध्वज के साथ कोर डेटा में UIImage को संग्रहीत करना घुमाओ HTML ड्रॉस्ट्रिंग एंड्रॉइड रेफ़रल ट्रैकिंग का परीक्षण कैसे करें? स्तंभ नाम से एक्सेल कॉलम संख्या HTML5 और जावास्क्रिप्ट में स्थानीय स्टोरेज के माध्यम से लूपिंग स्ट्रिंग से एक क्लास का निर्माण करना और इसे स्काला 2.10 में इंस्टाल्ट करना SQL सर्वर: निकालें तालिका मेटा-डेटा (विवरण, फ़ील्ड और उनके डेटा प्रकार) थकदार कनेक्शन पूल से बचने के लिए JDBC MySql कनेक्शन पूलिंग प्रथाओं कैसे mysql में नाम स्ट्रिंग विभाजित करने के लिए? दो जावास्क्रिप्ट एरेज़ की तुलना करें और डुप्लिकेट निकालें

कैसे MVC 4 सूची मॉडल बाध्यकारी काम करता है?

अगर मुझे MVC 4 की List में बाँध करने के लिए किसी रूप में इनपुट का एक सेट चाहिए, तो मुझे पता है कि input name विशेषताओं के लिए निम्नलिखित नामकरण सम्मेलन काम करेगा:

 <input name="[0].Id" type="text" /> <input name="[1].Id" type="text" /> <input name="[2].Id" type="text" /> 

लेकिन मैं इस बारे में उत्सुक हूँ कि कैसे मॉडल बांधने की मशीन को क्षमा करना है उदाहरण के लिए, निम्न के बारे में क्या है:

 <input name="[0].Id" type="text" /> <input name="[3].Id" type="text" /> <input name="[8].Id" type="text" /> 

मॉडल बांधने की मशीन इस कैसे संभाल लेंगे? क्या यह नल के साथ लंबाई 9 की एक List से बाँध सकता है? या क्या यह अभी भी लंबाई 3 की एक List से बाँध सकता है? या यह पूरी तरह चोक जाएगा?

मुझे क्यों परवाह है

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

वेब के समाधान से एकत्रित समाधान "कैसे MVC 4 सूची मॉडल बाध्यकारी काम करता है?"

संग्रह के साथ उपयोग करने के लिए एक विशिष्ट तार प्रारूप है इस पर स्कॉट हैन्सेलमैन के ब्लॉग पर यहां चर्चा की गई है:

http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

फिल हाक से एक और ब्लॉग प्रविष्टि इस बारे में यहां चर्चा करता है:

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

अंत में, एक ब्लॉग प्रविष्टि जो वास्तव में आप यहां चाहते हैं:

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

मैंने ऊपर दिए ब्लॉगों से जुड़े इस दृष्टिकोण का अनुसरण किया है और कुछ विवरण जोड़ दिए हैं जो कुछ के लिए उपयोगी हो सकते हैं – खासकर जब मैं गतिशील रूप से किसी भी पंक्तियों को जोड़ना चाहता हूं, लेकिन ऐसा करने के लिए AJAX का उपयोग नहीं करना चाहता था (मैं केवल फॉर्म सबमिट करना चाहता था पोस्ट में)। मैं अनुक्रमिक आईडी बनाए रखने के बारे में भी चिंता नहीं करना चाहता था मैं आरंभ और समाप्ति तिथियों की सूची कैप्चर कर रहा था:

मॉडल देखें:

 public class WhenViewModel : BaseViewModel { public List<DateViewModel> Dates { get; set; } //... Other properties } 

प्रारंभ / समाप्ति दिनांक दृश्य मॉडल:

 public class DateViewModel { public string DateID { get; set; } public DateTime? StartDate { get; set; } public DateTime? EndDate { get; set; } } 

फिर पृष्ठ में उन्हें (datepicker के साथ) का उपयोग करते हुए:

 <div class="grid-8-12 clear" id="DatesBlock"> @{ foreach (DateViewModel d in Model.Dates) { @:<div class="grid-5-12 left clear"> @Html.Hidden("Dates.Index", d.DateID) @Html.Hidden("Dates[" + d.DateID + "].DateID", d.DateID) //ID again to populate the view model @Html.TextBox("Dates[" + d.DateID + "].StartDate", d.StartDate.Value.ToString("yyyy-MM-dd")) @:</div> @:<div class="grid-5-12"> @Html.TextBox("Dates[" + d.DateID + "].EndDate", d.EndDate.Value.ToString("yyyy-MM-dd")) @:</div> <script type="text/javascript"> $('input[name="Dates[@d.DateID].StartDate"]') .datepicker({ dateFormat: 'yy-mm-dd'}); $('input[name="Dates[@d.DateID].EndDate"]') .datepicker({dateFormat: 'yy-mm-dd'}); </script> } } </div> <a href="#" onclick="AddDatesRow()">Add Dates</a> 

चूंकि ब्लॉग पोस्ट @ एरिकविकिंग्स पोस्ट में वर्णित है, संग्रह को दोहराए गए छिपे हुए तत्वों द्वारा बनाया गया है: @Html.Hidden("Dates.Index", d.DateID) पेज पर संग्रह में प्रत्येक प्रविष्टि के लिए।

मैं अपने डेटा को सर्वर पर वापस पोस्ट करने के लिए AJAX का उपयोग किए बिना पंक्तियों को जोड़कर मनमाने ढंग से जोड़ना चाहता हूं, जो मैंने संग्रह में एक "पंक्ति" / वस्तु के एक टेम्पलेट के साथ एक छिपी हुई div बनाकर किया था:

छुपा "खाका" पंक्ति:

 <div id="RowTemplate" style="display: none"> <div class="grid-5-12 clear"> @Html.Hidden("Dates.Index", "REPLACE_ID") @Html.Hidden("Dates[REPLACE_ID].DateID", "REPLACE_ID") @Html.TextBox("Dates[REPLACE_ID].StartDate", "") </div> <div class="grid-5-12"> @Html.TextBox("Dates[REPLACE_ID].EndDate", "") </div> </div> 

फिर jQuery का उपयोग किया गया जो टेम्पलेट को क्लोन करता है, एक नई पंक्ति के लिए उपयोग करने के लिए एक यादृच्छिक आईडी प्रदान करता है और अब दिखाई वाले क्लोन पंक्ति को ऊपर दी गई डिवीजन को जोड़ता है:

प्रक्रिया को पूरा करने के लिए jQuery:

 <script type="text/javascript"> function AddDatesRow() { var tempIndex = Math.random().toString(36).substr(2, 5); var template = $('#RowTemplate'); var insertRow = template.clone(false); insertRow.find('input').each(function(){ //Run replace on each input this.id = this.id.replace('REPLACE_ID', tempIndex); this.name = this.name.replace('REPLACE_ID', tempIndex); this.value = this.value.replace('REPLACE_ID', tempIndex); }); insertRow.show(); $('#DatesBlock').append(insertRow.contents()); //Attach datepicker to new elements $('input[name="Dates['+tempIndex+'].StartDate"]') .datepicker({dateFormat: 'yy-mm-dd' }); $('input[name="Dates['+tempIndex+'].EndDate"]') .datepicker({dateFormat: 'yy-mm-dd' }); } </script> 

JSFiddle परिणाम का परिणाम: http://jsfiddle.net/mdares/7JZh4/

मेरे पास गतिशील सूची है जो इस तरह दिखती है:

 <ul id="okvedList" class="unstyled span8 editableList"> <li> <input data-val="true" data-val-required="The Guid field is required." id="Okveds_0__Guid" name="Okveds[0].Guid" type="hidden" value="2627d99a-1fcd-438e-8109-5705dd0ac7bb"> --//-- </li> 

इसलिए जब मैं पंक्ति (ली तत्व) को जोड़ या हटा देता हूं, तो मुझे आइटम पुन: क्रमित करना होगा

  this.reorderItems = function () { var li = this.el_list.find('li'); for (var i = 0; i < li.length; i++) { var inputs = $(li[i]).find('input'); $.each(inputs, function () { var input = $(this); var name = input.attr('name'); input.attr('name', name.replace(new RegExp("\\[.*\\]", 'gi'), '[' + i + ']')); var id = input.attr('id'); input.attr('id', id.replace(new RegExp('_.*__', 'i'), '_' + i + '__')); }); } }; 

इस सूची को सरल एचटीएमएल में रखा गया है। बेकन क्लाइंट से और सर्वर की ओर से एक्शन पैरामीटर की सूची में

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

असल में, नॉकआउट एक जेएसओएन स्ट्रिंग में संग्रह भेजते हैं, और मैंने उन्हें अपने नियंत्रक में डिस्ट्रियम बना दिया।

अधिक जानकारी के लिए: http://learn.knockoutjs.com/#/?tutorial=collections

जब मैं क्रोम ब्राउज़र का इस्तेमाल कर रहा हूं और बैक बटन पर क्लिक करता हूं, और मुझे क्रोम ब्राउज़र द्वारा मूल्यों को सही ढंग से नियंत्रित नहीं किया जाता है तो टाइप = "छिपा हुआ" इनपुट मिलता है I

शायद हम बदल सकते हैं

 <input type="hidden" name="Detes.Index" value="2016/01/06" /> 

सेवा मेरे

 <div style="display: none"> <input type="text" name="Detes.Index" value="2016/01/06" /> </div> 

अधिक जानकारी प्रदान करें: क्रोम ब्राउज़र के इतिहास में उपयोग के लिए छिपे हुए फॉर्म फ़ील्ड मानों को कैश नहीं करता http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/