ASP.NET MVC 3: TextBoxFor के साथ "नाम" विशेषता को ओवरराइड करें


99

Html.TextBoxForनाम विशेषता को ओवरराइड करते समय क्या यह संभव है ?

मैंने बिना किसी सफलता के कोशिश की है। मुझे काम करने के लिए क्लाइंट साइड सत्यापन प्राप्त करने के लिए टेक्स्टबॉक्सफॉर का उपयोग करने की आवश्यकता है, हालांकि जिन कारणों से मैं इसमें नहीं जाऊंगा, उन्हें टेक्स्टबॉक्स के नाम को जेनरेट होने से अलग होने की आवश्यकता है।

मैंने निम्नलिखित कोशिश की है:

@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" })

जो आईडी के लिए काम करता है लेकिन नाम नहीं। क्या यह संभव है?

अद्यतन : TextBoxFor के लिए कोड में देख रहे हैं। ऐसा नहीं लगता है कि कोई आसान तरीका है। उम्मीद है कि कोई मुझे गलत साबित कर सकता है।


'डेटा ’का डेटा प्रकार क्या है
आर्किल


2
वे सवाल कुछ अलग सा पूछ रहे हैं। इसके अलावा - यह तीनों में से एक है, इसलिए मुझे लगता है कि आप इसका मतलब नकल करते हैं।
रोब स्टीवेन्सन-लेगेट

जवाबों:


234

रोब, वास्तव में एक बहुत सरल तरीका है। नाम के बजाय, नाम का उपयोग करें :

@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" })

11
केस-संवेदी यह @highwingers है, इस छोटे से विवरण में घंटे बचाने की क्षमता है।
अनार खलीलोव

3
ओवरकिल .. नाम लेकिन आईडी X_X
व्लादिमीर

2
अजीब, "आईडी" केस-संवेदी नहीं है (आईडी और आईडी के साथ ठीक काम करता है) लेकिन "नाम" नहीं है।
व्लादिमीर

10
ASP.NET 4 के साथ, Nameदो विशेषताओं में परिणाम प्रदान करते हैं , Nameऔर name, और मॉडल बाइंडर का उपयोग करता है name
15 फरवरी को जीसर्ज

1
लेकिन दो अलग-अलग गुणों को संभालना जिनके नाम केवल मामले से भिन्न होते हैं, एक रखरखाव दुःस्वप्न के लिए एक नुस्खा है .....
जेम्स मैककॉर्मैक

41

क्या आप यह पूछ रहे हैं क्योंकि आप नाम के लिए उपसर्ग लागू करना चाहते हैं? यदि हां, तो आप ViewData.TemplateInfo.HtmlFieldPrefixअपने नियंत्रक में सेटिंग करके ऐसा कर सकते हैं ।

मैंने ब्रैड विल्सन के ब्लॉग से इस सामान के बारे में बहुत कुछ सीखा ।


यह विजेता की तरह दिखता है! सुंदर।
रोब स्टीवेन्सन-लेगेट

2
हाँ, उन्होंने छिपाया कि एक अच्छी तरह से नहीं था :)
जेम्स मैककॉर्मैक

इसने मुझे कुछ सिरदर्द और कोड दोहराव से बचाया।
davidXYZ

13

EditorFor में एक अधिभार है जहाँ आप nameएक पैरामीटर के रूप में विशेषता की आपूर्ति कर सकते हैं :

 @Html.EditorFor(expression, null, name)

1
अगर मैं इस घंटे पहले पाया जाता तो मुझे घंटों की बचत होती, हाहा
जॉनी कर्र

दिलचस्प है, लेकिन DropDownListFor जैसे समान सहायकों के लिए नाम विशेषता के लिए कोई अधिभार नहीं है, आपको इसे HTML विशेषताओं के पैरामीटर (नाम में पूंजी एन के साथ) में निर्दिष्ट करना होगा।
nmit026

8

प्रयास करें EditorFor । यदि आप यह सुनिश्चित करना चाहते हैं कि यदि आप पाठ प्रकार प्रदान करना चाहते हैं तो स्ट्रिंग को टेम्पलेट नाम के रूप में पास किया जा सकता है, भले ही संपत्ति प्रकार स्ट्रिंग न हो। यदि संपत्ति पहले से ही स्ट्रिंग है, तो इसे templatenameटेक्स्टबॉक्स को रेंडर करने के लिए स्पष्ट रूप से आवश्यकता नहीं है , इसलिए आप पास कर सकते हैं null। ध्यान दें कि इसके लिए आईडी पैरामीटर की स्पष्ट रूप से आवश्यकता नहीं है, यह तत्व नाम से पता लगाएगा। और सभी सत्यापन चीजें अभी भी EditorFor के साथ सक्रिय हैं

 @Html.EditorFor(x => x.Data, "string", Model.Key + "_Data")

7

बेन का जवाब मुझे वही मिला जो मैं देख रहा था सिवाय इसके कि आपको Html.Raw में लपेटने की जरूरत है

@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData"))

4

इसे Microsoft GOTCHA कहते हैं

इस तरह से कैप में नाम का उपयोग करें

@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"})

3

थोड़ा "व्याख्या" =), कोशिश करें:

@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")

यह करने के लिए एक अच्छा आसान तरीका की तरह लगता है। यदि थोड़ा हैक किया गया :-)
रोब स्टीवेन्सन-लेगेट

उम, इस तरह से, आप बल्कि सामान्य Html.TexBox ले जाएगा .. क्योंकि किसी भी स्थैतिक टाइपिंग के बाद वैसे भी चला गया है
तेज जॉनी

1

मेरे लिए, यह काम करता है! मुझे उम्मीद है कि मदद!

@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } })

1
@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" })

यह निश्चित नहीं है कि बीच में जो दो स्ट्रिंग पैरामीटर हैं, वे काम करते हैं, लेकिन यह केवल तभी काम करता है जब मैंने दोनों को टाइप किया।


यह आईडी और नाम है। यह मेरे लिए काम किया। मैं उपरोक्त सभी उत्तरों से गुजरा और उनमें से गैर काम किया, लेकिन यह 1. धन्यवाद।
ओरियन

public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string templateName, string htmlFieldName, object additionalViewData);। पता नहीं क्या templateNameहोना चाहिए था, इसलिए मैंने इस्तेमाल किया null। क्योंकि htmlFieldNameमैंने पैरामीटर के नाम का उपयोग किया (मेरे मामले में "आईपीएमआई" के बजाय "आईपीएमआई")। मेरे लिए यही चाल चली।
BCdotWEB

0

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

@Html.EditorFor(m => m.UserName, "name", "UserNameDisabled", new { htmlAttributes = new { @class = "form-control", @disabled = "disabled"} });

का परिणाम:

<input class="form-control text-box single-line" disabled="disabled" id="UserNameDisabled" name="UserNameDisabled" type="text" value="someEnteredValue" /> 

0

इसे सरल रखें, आपकी पहले से ही आईडी प्रदान करने के लिए आपको "टेक्स्टबॉक्सफ़ोर" के बजाय "टेक्स्टबॉक्स" विधि का उपयोग करने में सक्षम होना चाहिए और यह ठीक क्लाइंट साइड और सर्वर साइड काम करेगा। इसके अलावा, यद्यपि स्वीकृत उत्तर काम करेगा, लेकिन यदि आप एक ब्राउज़र का उपयोग करके इसका निरीक्षण करते हैं तो आपके टैग पर डुप्लिकेट नाम विशेषताओं का उत्पादन करेगा। नीचे दिए गए समाधान में वह समस्या नहीं है।

MvcHtmlString Html.TextBox (स्ट्रिंग नाम, स्ट्रिंग मान, ऑब्जेक्ट htmlAttributes)

@Html.TextBox(Model.Key + "_Data", Model.Key, new { id = Model.Key + "_Data" }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.