2010-01-12 14 views
8

पर उपसर्ग के साथ HTML को प्रस्तुत करने के लिए मेरे पास एक एएसपीएनईटी एमवीसी 2 प्रोजेक्ट है। जब मैंटेक्स्टबॉक्स, आईडी विशेषता

<%= Html.TextBoxFor(model => model.Login) %> 

का उपयोग TexBoxFor मॉडल के रूप में

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

फील्ड प्रस्तुत करना होगा

[Required(ErrorMessage = "")] 
[DisplayName("Login")] 
public string Login { get; set; } 

मैं आईडी और कुछ उपसर्ग के साथ नाम विशेषता बना सकते हैं है?

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

सभी के लिए धन्यवाद।

उत्तर

13

ऐसा लगता है कि एमवीसी 2 आरटीएम वर्तमान में इस सुविधा को प्रदान नहीं करता है। आप इन विस्तार के तरीकों की कोशिश कर सकते हैं:

   public static MvcHtmlString ValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression) 
    { 
     return ValidationMessageFor(htmlHelper, prefix, expression, null, new RouteValueDictionary()); 
    } 

    public static MvcHtmlString ValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression, string validationMessage) 
    { 
     return ValidationMessageFor(htmlHelper, prefix, expression, validationMessage, new RouteValueDictionary()); 
    } 

    public static MvcHtmlString ValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression, string validationMessage, object htmlAttributes) 
    { 
     return ValidationMessageFor(htmlHelper, prefix, expression, validationMessage, new RouteValueDictionary(htmlAttributes)); 
    } 

    public static MvcHtmlString ValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression, string validationMessage, IDictionary<string, object> htmlAttributes) 
    { 
     return htmlHelper.ValidationMessage(String.Format("{0}.{1}", prefix, ExpressionHelper.GetExpressionText(expression)), 
      validationMessage, 
      htmlAttributes); 
    } 

    public static MvcHtmlString HiddenFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression) 
    { 
     return HiddenFor(htmlHelper, prefix, expression, (IDictionary<string, object>)null); 
    } 

    public static MvcHtmlString HiddenFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) 
    { 
     return HiddenFor(htmlHelper, prefix, expression, new RouteValueDictionary(htmlAttributes)); 
    } 

    public static MvcHtmlString HiddenFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes) 
    { 
     return htmlHelper.Hidden(String.Format("{0}.{1}", prefix, ExpressionHelper.GetExpressionText(expression)), 
      ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).Model, 
      htmlAttributes); 
     /*return HiddenHelper(htmlHelper, 
          ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).Model, 
          false, 
          ExpressionHelper.GetExpressionText(expression), 
          htmlAttributes);*/ 
    } 

    public static MvcHtmlString TextAreaFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression) 
    { 
     return TextAreaFor(htmlHelper, prefix, expression, (IDictionary<string, object>)null); 
    } 

    public static MvcHtmlString TextAreaFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) 
    { 
     return TextAreaFor(htmlHelper, prefix, expression, new RouteValueDictionary(htmlAttributes)); 
    } 

    public static MvcHtmlString TextAreaFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes) 
    { 
     if (expression == null) 
     { 
      throw new ArgumentNullException("expression"); 
     } 

     string value; 
     var modelMetadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
     if (modelMetadata.Model != null) 
      value = modelMetadata.Model.ToString(); 
     else 
      value = String.Empty; 

     return htmlHelper.TextArea(String.Format("{0}.{1}", prefix, ExpressionHelper.GetExpressionText(expression)), 
      value, 
      htmlAttributes); 
    } 

    public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression) 
    { 
     return TextBoxFor(htmlHelper, prefix, expression, (IDictionary<string, object>)null); 
    } 

    public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) 
    { 
     return TextBoxFor(htmlHelper, prefix, expression, new RouteValueDictionary(htmlAttributes)); 
    } 

    public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, string prefix, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes) 
    { 
     return htmlHelper.TextBox(String.Format("{0}.{1}", prefix, ExpressionHelper.GetExpressionText(expression)), 
      ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).Model, 
      htmlAttributes); 
    } 
+1

आप एक किंवदंती हैं। – ajbeaven

+0

मुझे इसकी आवश्यकता थी क्योंकि मुझे कुछ ऑब्जेक्ट्स पर उपसर्ग सेट की आवश्यकता थी, लेकिन दूसरों को नहीं। – Chris

6

तुम हमेशा htmlAttributes सेट कर सकते हैं, हालांकि यह यह करने के लिए स्पष्ट तरीका नहीं है।
और, आपको इसे अपने सभी सहायकों में करना होगा।

<%: Html.TextBoxFor(model => model.Login, new { @id = "prefixLogin" }) %> 
+0

क्या यह वास्तव में सत्यापित है अगर यह काम करता है? क्योंकि मुझे नहीं लगता कि यह होगा। मुझे नहीं लगता कि आप एचटीएमएलहेल्पर में निर्मित अज्ञात ऑब्जेक्ट का उपयोग करके नाम या आईडी प्रॉपर्टी सेट कर सकते हैं क्योंकि यह आपके ऑब्जेक्ट htmlAttributes के ऊपर अपने मानों को विलय करता है। मैंने अपने स्वयं के उपयोग के लिए कुछ कस्टम हेल्पर्स बनाए, जहां मैंने उपयोग को दोबारा दर्ज किया ताकि अगर मैं चाहता हूं कि मैं यहां जो कुछ भी कहूं वह कर सकता हूं। –

+0

'आईडी' संपत्ति बदला जा सकता है लेकिन 'नाम' नहीं हो सकता है। 'नाम' अधिलेखित है। मुद्दा यह होगा कि आईडी फ़ील्ड असंगत रूप से बदलता है, तो लेबलफॉर, प्रमाणीकरण संदेश और टेक्स्टबॉक्स फोर (उदाहरण) सिंक से बाहर हो जाएगा, इसलिए एक्सटेंशन विधियां जाने का तरीका हैं। –

0

ही जारी करने के लिए अलग अलग समाधान कर रहे हैं .. मैं एक नया MVC परीक्षण परियोजना बनाया है और पुराने प्रोजेक्ट जहाँ मैं इस त्रुटि हो रही थी करने के लिए पूरे दृश्य की web.config कॉपी किया है, हल

संबंधित मुद्दे