उत्तर बहुत अच्छे हैं लेकिन एमवीसी और .NET की नवीनतम रिलीज़ में एक और तरीका है जो मैं वास्तव में "पुराने स्कूल" फॉर्मकॉलिनेशन और अनुरोध कुंजी के बजाय उपयोग करना चाहता हूं।
एक फार्म टैग के भीतर निहित HTML स्निपेट पर विचार करें जो या तो AJAX या FORM POST करता है।
<input type="hidden" name="TrackingID"
<input type="text" name="FirstName" id="firstnametext" />
<input type="checkbox" name="IsLegal" value="Do you accept terms and conditions?" />
आपका नियंत्रक वास्तव में प्रपत्र डेटा को पार्स करेगा और इसे परिभाषित प्रकार के मापदंडों के रूप में आपको वितरित करने का प्रयास करेगा। मैंने चेकबॉक्स शामिल किया क्योंकि यह एक मुश्किल है। यदि जाँच नहीं की जाती है और जाँच नहीं की जाती है तो यह "चालू" पर पाठ लौटाता है। हालांकि आवश्यकता यह है कि ये परिभाषित चर मौजूद होना चाहिए (जब तक कि अशक्त (याद रखें कि हालांकि string
यह अशक्त है)) अन्यथा AJAX या POST वापस विफल हो जाएगा।
[HttpPost]
public ActionResult PostBack(int TrackingID, string FirstName, string IsLegal){
MyData.SaveRequest(TrackingID,FirstName, IsLegal == null ? false : true);
}
आप किसी भी रेज़र हेल्पर्स का उपयोग किए बिना एक मॉडल को वापस पोस्ट कर सकते हैं। मुझे पता चला है कि कुछ समय की जरूरत है।
public Class HomeModel
{
public int HouseNumber { get; set; }
public string StreetAddress { get; set; }
}
HTML मार्कअप बस होगा ...
<input type="text" name="variableName.HouseNumber" id="whateverid" >
और आपका कंट्रोलर (रेज़र इंजन) फॉर्म वेरिएबल "वैरिएबल नेम" (नाम आपके जैसा है लेकिन इसे लगातार बनाए रखेगा) को इंटरसेप्ट करेगा और इसे बनाने और MyModel में डालने का प्रयास करेगा।
[HttpPost]
public ActionResult PostBack(HomeModel variableName){
postBack.HouseNumber; //The value user entered
postBack.StreetAddress; //the default value of NULL.
}
जब एक नियंत्रक एक मॉडल (इस मामले में होममॉडल) की उम्मीद कर रहा है, तो आपको सभी फ़ील्ड को परिभाषित करने की आवश्यकता नहीं है क्योंकि पार्सर बस उन्हें डिफ़ॉल्ट रूप से छोड़ देगा, आमतौर पर NULL। अच्छी बात यह है कि आप मार्क-अप पर विभिन्न मॉडलों को मिक्स एंड मैच कर सकते हैं और पोस्ट बैक पार्स जितना संभव हो उतना पॉप्युलेट होगा। आपको पृष्ठ पर एक मॉडल को परिभाषित करने या किसी भी सहायक का उपयोग करने की आवश्यकता नहीं है।
TIP: कंट्रोलर में पैरामीटर का नाम HTML मार्क-अप में परिभाषित नाम है "name =" मॉडल का नाम नहीं है, लेकिन इसमें अपेक्षित वैरिएबल का नाम है!
उपयोग करना List<>
इसके मार्क-अप में थोड़ा अधिक जटिल है।
<input type="text" name="variableNameHere[0].HouseNumber" id="id" value="0">
<input type="text" name="variableNameHere[1].HouseNumber" id="whateverid-x" value="1">
<input type="text" name="variableNameHere[2].HouseNumber" value="2">
<input type="text" name="variableNameHere[3].HouseNumber" id="whateverid22" value="3">
सूची पर सूचकांक <> हमेशा शून्य आधारित और अनुक्रमिक होना चाहिए। 0,1,2,3।
[HttpPost]
public ActionResult PostBack(List<HomeModel> variableNameHere){
int counter = MyHomes.Count()
foreach(var home in MyHomes)
{ ... }
}
IEnumerable<>
गैर शून्य आधारित और गैर अनुक्रमिक सूचकांकों के लिए उपयोग करना वापस पोस्ट करें। बाइंडर की मदद के लिए हमें एक अतिरिक्त छिपा इनपुट जोड़ने की आवश्यकता है।
<input type="hidden" name="variableNameHere.Index" value="278">
<input type="text" name="variableNameHere[278].HouseNumber" id="id" value="3">
<input type="hidden" name="variableNameHere.Index" value="99976">
<input type="text" name="variableNameHere[99976].HouseNumber" id="id3" value="4">
<input type="hidden" name="variableNameHere.Index" value="777">
<input type="text" name="variableNameHere[777].HouseNumber" id="id23" value="5">
और कोड को केवल IEnumerable और कॉल का उपयोग करने की आवश्यकता है ToList()
[HttpPost]
public ActionResult PostBack(IEnumerable<MyModel> variableNameHere){
int counter = variableNameHere.ToList().Count()
foreach(var home in variableNameHere)
{ ... }
}
प्रत्येक पृष्ठ पर एक जटिल 'दृश्य' मॉडल बनाने के लिए एकल मॉडल या एक ViewModel (मॉडल के अन्य मॉडल के संदर्भ में मॉडल) का उपयोग करने की सिफारिश की गई है। प्रस्तावित के रूप में मिश्रण और मिलान को बुरा अभ्यास माना जा सकता है, लेकिन जब तक यह काम करता है और पठनीय है, तब तक बीएडी नहीं। हालांकि, यह रेजर इंजन की शक्ति और लचीलेपन को प्रदर्शित करता है।
इसलिए यदि आपको मनमाने तरीके से कुछ गिराने या रेज़र हेल्पर से किसी अन्य मान को ओवरराइड करने की ज़रूरत है, या बस अपने स्वयं के सहायकों को बनाने का मन नहीं है, तो एकल रूप के लिए जो डेटा के कुछ असामान्य संयोजन का उपयोग करता है, आप जल्दी से अतिरिक्त स्वीकार करने के लिए इन विधियों का उपयोग कर सकते हैं डेटा।