MVC और रेजर में Html.TextboxFor और Html.EditorFor के बीच अंतर


170

नया "एडिट" दृश्य जोड़ते समय डिफ़ॉल्ट रूप से इन्हें क्यों बदला गया? EditorFor()बनाम का उपयोग करते समय क्या फायदे हैं TextboxFor()?

मुझे मिला

डिफ़ॉल्ट रूप से, बनाएँ और संपादित करें मचान अब Html.EditorFor सहायक का उपयोग Html.TextBoxFor सहायक के बजाय करते हैं। यह डेटा एनोटेशन विशेषताओं के रूप में मॉडल पर मेटाडेटा के लिए समर्थन में सुधार करता है जब ऐड व्यू संवाद बॉक्स एक दृश्य उत्पन्न करता है।


5
क्या किसी के पास इसका उदाहरण है कि यह कैसे किया जाता है? उदाहरण के लिए संपादकीय एक DatePicker लिखना?
शेनकेम

जवाबों:


166

इसका लाभ EditorForयह है कि आपका कोड ए से बंधा नहीं है <input type="text"। इसलिए यदि आप अपने टेक्स्टबॉक्स को किस तरह से बदल रहे हैं, इसके पहलू में कुछ बदलने का निर्णय लेते हैं, तो आप उन्हें divएक कस्टम संपादक टेम्प्लेट ( ~/Views/Shared/EditorTemplates/string.cshtml) लिख सकते हैं और आपके एप्लिकेशन के सभी टेक्स्टबॉक्स अपने आप इस परिवर्तन से लाभान्वित हो जाएंगे, जबकि यदि आपने हार्डकोड किया है Html.TextBoxForतो इसे हर जगह संशोधित करना होगा। जिस तरह से यह प्रस्तुत किया गया है उसे नियंत्रित करने के लिए आप डेटा एनोटेशन का उपयोग भी कर सकते हैं।


एक बग है, शायद एक पुराने संस्करण में। EditorFor 'डबल' को नहीं पहचानता है। 'लॉन्ग' के लिए इसे 'इंट' और स्टेप = "0.01" के रूप में माना जाता है, इसलिए यह विशेषताओं में काम नहीं करता है इसलिए मैंने TextBoxFor का इस्तेमाल किया और @ टाइप = 'नंबर' @ स्टेप = "0.01" जोड़ा ताकि यह काम किया
चार्ली

129

TextBoxFor : यह निर्दिष्ट अभिव्यक्ति के अनुरूप पाठ इनपुट html तत्व की तरह प्रस्तुत करेगा। सरल शब्द में, यह हमेशा एक इनपुट टेक्स्टबॉक्स की तरह प्रस्तुत करेगा, चाहे वह संपत्ति का बेतरतीब डेटाटाइप हो, जो नियंत्रण के साथ बाइंड हो रहा हो।

EditorFor : यह नियंत्रण थोड़ा स्मार्ट है। यह गुण के डेटाटाइप के आधार पर HTML मार्कअप का प्रतिपादन करता है। उदाहरण के लिए मान लीजिए कि मॉडल में एक बूलियन संपत्ति है। इस प्रॉपर्टी को चेकबॉक्स के रूप में देखने के लिए या तो हम CheckBoxFor या EditorFor का उपयोग कर सकते हैं। दोनों को एक ही मार्कअप बनाया जाएगा।

EditorFor का उपयोग करने का क्या फायदा है?

जैसा कि हम जानते हैं, संपत्ति के डेटाटाइप के आधार पर यह html मार्कअप उत्पन्न करता है। इसलिए मान लीजिए कि यदि हम मॉडल में संपत्ति के डेटाटाइप को बदलते हैं, तो दृश्य में कुछ भी बदलने की आवश्यकता नहीं है। EditorFor नियंत्रण html मार्कअप को स्वचालित रूप से बदल देगा।


15
महान, सरल उत्तर जो आसानी से एक नौसिखिए द्वारा भी अवशोषित कर सकता है।
किंग्स

उपरोक्त विवरण इस लिंक में मदद मिलेगी forums.asp.net/t/1948071.aspx?EditorFor+and+EditorForModel
अमोल Shiledar

क्या कभी कोई ऐसा मामला है जहां आपको TextBoxFor का उपयोग करना चाहिए?
eaglei22

55

Html.TextboxForहमेशा एक पाठ बॉक्स बनाता है ( <input type="text" ...)।

जबकि EditorFor प्रकार और मेटा जानकारी को देखता है, और आपके द्वारा आपूर्ति किए गए किसी अन्य नियंत्रण या टेम्पलेट को प्रस्तुत कर सकता है।

उदाहरण के लिए DateTime गुणों के लिए आप एक टेम्पलेट बना सकते हैं जो jQuery DatePicker का उपयोग करता है।


12
संपादन का उपयोग करके jquery डेटपिकर को लागू करने के तरीके पर कोई उदाहरण?
पेरू

2
दिनांक-समय मामले का उपयोग करके अंतर को सरल बनाने के लिए धन्यवाद।
किंग्स

1
@Peru, यहाँ या यहाँ है कैसे करने के लिए implement jquery datepickerऔर साथ इसे का उपयोग EditorForहै यहाँ
shaijut

8

यह पिछली टिप्पणियों में उल्लिखित बुनियादी अंतरों में से एक है:
Readonlyसंपत्ति टेक्स्टबॉक्स के साथ काम करेगी और इसके साथ काम नहीं करेगी EditorFor

@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })

कोड काम करता है ऊपर, जहां आप पर निम्न नियंत्रण नहीं कर सकते हैं के साथ के रूप में केवल पढ़ने के लिए

@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })

16
आप निम्न वाक्य रचना का उपयोग करके EditorFor को आसानी से बना सकते हैं: @ Html.EditorFor (model => model.DateSoldOn, new {htmlAttributes = new {@readonly = "readonly" "})
डग नॉड्सन

4

एक स्ट्रिंग डेटा प्रकार के लिए HTML आउटपुट में थोड़ा अंतर भी है।

Html.EditorFor:  
<input id="Contact_FirstName" class="text-box single-line" type="text" value="Greg" name="Contact.FirstName">

Html.TextBoxFor:
<input id="Contact_FirstName" type="text" value="Greg" name="Contact.FirstName">

2
यह पूरी तरह से गलत उत्तर है, महत्वपूर्ण अंतर यह है कि टेक्सबॉक्स रिटर्न इनपुट देता है और संपादक आपके टेम्पलेट को लौटाता है जहां इनपुट संपादक के लिए डिफ़ॉल्ट टेम्पलेट है।
अर्टेम जी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.