2012-01-02 12 views
12

को उपसर्ग के रूप में मॉडल के नाम जोड़ने जब मैंजब Html.TextBoxFor का उपयोग कर, आईडी

@Html.TextBoxFor(model => model.Name) 

का उपयोग मैं एक एएसपी MVC 3 परियोजना है TexBoxFor प्रस्तुत करना के रूप में

<input id="Name" name="Name" type="text" value="" /> 

मेरी मॉडल है "UserModel":

[DisplayName("Name")] 
public string Name{ get; set; } 

क्या आईडी में उपसर्ग के रूप में मॉडल के नाम में जोड़ने का कोई तरीका है? शायद कुछ विशेषता?

मैं चाहता हूँ कि पाठ बॉक्स के रूप में

<input id="UserName" name="UserName" type="text" value="" /> 
+4

प्रस्तुत करना होगा यदि आप चाहते हैं यह ध्यान में रखते हुए उपयोगकर्ता नाम के नाम से जाना, यह क्यों मॉडल में उपयोगकर्ता नाम फोन नहीं? –

+0

मैं दूसरी ओवाईविंड की टिप्पणी, नाम की एक संपत्ति क्यों है, जिसे "नाम" को मजबूर करने वाली विशेषता के साथ सजाया गया है, फिर भी आप इसे "उपयोगकर्ता नाम" के रूप में प्रस्तुत करना चाहते हैं? मुझे अजीब लग रहा है। – enorl76

+0

यह संपत्ति का नाम बदलने का विकल्प है, लेकिन यदि सभी एचटीएमएल hrlpers के लिए कुछ विशेषता रखने का कोई तरीका है तो यह बहुत बेहतर और आसान था। – Kobi

उत्तर

-2

आप लिख सकते हैं प्रस्तुत करना होगा:

@Html.TextBoxFor(model => model.Name, new { @id= "UserName",@Name="UserName" }) 
+0

आपका कोड अभी भी 'नाम' विशेषता को ** नाम ** के रूप में उत्पन्न करेगा। तो, वह वह नहीं चाहता जो वह चाहता है। – tugberk

+0

यह कोई समस्या नहीं है। वह लिख सकता है: @ एचटीएमएल। टेक्स्टबॉक्स फोर (मॉडल => मॉडल। नाम, नया {@id = "उपयोगकर्ता नाम", @ नाम = "उपयोगकर्ता नाम"}) – Hadas

+2

यह पूरी तरह गलत है! जब आप 'टेक्स्टबॉक्स फोर' जैसे एचटीएमएल हेल्पर्स के साथ काम करते हैं तो आप 'name' विशेषता को ओवरराइड नहीं कर सकते हैं। बीटीडब्लू, एफवाईआई, आपको वहां '@' से बचने की ज़रूरत नहीं है। आप 'सी' से बचने वाले विशेष सी # कीवर्ड के साथ '@' एस्केप चार का उपयोग करते हैं। – tugberk

2

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

[DisplayName("Name")] 
public string UserName { get; set; } 
0

आप "नाम" के लिए "उपयोगकर्ता नाम" से अपने DisplayName विशेषता बदलना चाहिए।

[DisplayName("UserName")] 
public string Name{ get; set; } 

यदि आप ऐसा करते हैं, तो आप जो भी मांग रहे हैं उसे प्राप्त करेंगे।

+1

काम नहीं करेगा, संपत्ति का नाम टेक्स्टबॉक्स का नाम होगा – gdoron

3

यदि आप अपने मॉडल में वर्णित इनपुट को प्रस्तुत नहीं करना चाहते हैं, तो शायद आप Html.TextBoxFor सहायक का उपयोग नहीं करना चाहते हैं।

इसके बजाय Html.TextBox आज़माएं। आप सटीक मान आप देख रहे हैं के साथ प्रदान कर सकते हैं:

@Html.TextBox("UserName", Model.Name, new { id = "UserName" }) 

मत भूलना आप भी सहायकों भूल जाते हैं और सादे पुराने एचटीएमएल का उपयोग कर सकते हैं:

<input id="UserName" name="UserName" type="text" value="@Model.Name" /> 

चेतावनी: का उपयोग करते समय इनमें से किसी भी विधि और डिफ़ॉल्ट मॉडल बाइंडर, डेटा को वापस सबमिट करते समय इस इनपुट का मान आपके मॉडल पर सही ढंग से बाध्य नहीं होगा।

+0

क्या आप कृपया "चेतावनी" भाग को थोड़ा सा समझा सकते हैं? क्या फॉर्म फ़ील्ड एमवीसी में पोस्टबैक पर पहले ही सहेजे नहीं गए हैं? –

+2

इनपुट नामों के आधार पर मान मॉडल के लिए बाध्य हैं। तो इस मामले में मॉडल बाइंडर को यह नहीं पता कि "UserName" इनपुट का मान मॉडल पर "नाम" मान से मेल खाता है। – enoshixi

11
@Html.TextBoxFor(model => model.attr, new { Name = "txt1" }) 

बस का प्रयोग करें "नाम" के बजाय "नाम"

+2

-1: इसके परिणामस्वरूप नाम: नाम = "txt1" और name = "attr" नामक दो गुण होंगे। यह फ़ायरफ़ॉक्स में काम करता है, क्योंकि ब्राउज़र दूसरे नाम-विशेषता को अनदेखा करता है। लेकिन यह अनिवार्य रूप से एक बॉट है। –

+1

वाह, मैं HTML विशेषताओं में नाम को ओवरराइड करने का प्रयास कर रहा था और यह कम केस नाम के कारण काम नहीं कर रहा था। धन्यवाद। – DeadlyChambers

0

तो मैं समझ गया अपने प्रश्न सही ढंग से, आप मॉडल की संपत्ति नाम पर एक स्ट्रिंग उपसर्ग करने में सक्षम होना चाहता हूँ।

इसलिए यदि आप दृश्य 'खाता' में हैं, तो आप

AccountName 

मिल जाएगा, जबकि दृश्य 'टेस्ट' में आप अगर ऐसा है

TestName 

मिल जाएगा, मैं लगता है कि आपका सर्वश्रेष्ठ दांव PartialFor विस्तार विधि अधिभावी है, इसी तरह के रूप में यहाँ किया जाता है:

ASP.NET MVC partial views: input name prefixes

इस उदाहरण में, यह

Account.Name and Test.Name 
संबंधित मुद्दे