EditorFor () और html गुण


113

Asp.Net MVC 2.0 पूर्वावलोकन बिल्डरों जैसे सहायकों को प्रदान करता है

Html.EditorFor(c => c.propertyname)

यदि संपत्ति का नाम स्ट्रिंग है, तो उपरोक्त कोड एक टेक्सबॉक्स को प्रस्तुत करता है।

क्या होगा अगर मैं टेक्स्ट बॉक्स या अपनी खुद की सीएसएस श्रेणी की संपत्ति के लिए मैक्सलॉग्रफी और आकार के गुणों में उत्तीर्ण होना चाहता हूं?

क्या मुझे अपने आवेदन में प्रत्येक आकार और लंबाई के संयोजन के लिए एक टेम्पलेट बनाने की आवश्यकता है? यदि ऐसा है, तो यह डिफ़ॉल्ट टेम्पलेट को उपयोगी नहीं बनाता है।

जवाबों:


92

MVC3 में, आप निम्नानुसार चौड़ाई निर्धारित कर सकते हैं:

@Html.TextBoxFor(c => c.PropertyName, new { style = "width: 500px;" })

62
@vondip। सुनिश्चित करें कि इसका TEXTBOX है न कि EDITOR। संपादक के साथ काम करना।
कैस्पर स्कोव

1
यह textareas के साथ भी काम करता है: @ Html.TextAreaFor (c => c.PropertyName, new {style = "width: 500px;"})
टार्जन

ध्यान दें कि कुछ डेटा एनोटेशन TextBoxFor द्वारा समर्थित नहीं हैं, जो EditorFor के साथ काम करेंगे, जैसे कि FormatString
AaronLS

14
क्या इसका जवाब नहीं है, पूरी तरह से अनदेखा करें कि सवाल क्या है, अर्थात् EditorFor-Template कार्यक्षमता?
फिलिप एम।

1
TextBoxFor का उपयोग करना हालांकि डेटा एनोटेशन के रूप में सेट किए गए डिस्प्ले फॉर्मेट्स को बंद कर देता है
एंडर्स लिंडेन

61

मैंने अपने / Views / साझा / EditorTemplates फ़ोल्डर में String.ascx नामक EditorTemplate बनाकर इसे हल किया:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>
<% int size = 10;
   int maxLength = 100;
   if (ViewData["size"] != null)
   {
       size = (int)ViewData["size"];
   }
   if (ViewData["maxLength"] != null)
   {
       maxLength = (int)ViewData["maxLength"];
   }
%>
<%= Html.TextBox("", Model, new { Size=size, MaxLength=maxLength }) %>

मेरे विचार में, मैं उपयोग करता हूं

<%= Html.EditorFor(model => model.SomeStringToBeEdited, new { size = 15, maxLength = 10 }) %>

मेरे लिए एक आकर्षण की तरह काम करता है!


1
शानदार - मेरे पास डेटपिकर था डेटाइम ड्रॉप डाउन जो मैंने पहले ही टेम्पलेट कर दिया था, लेकिन इसके लिए अतिरिक्त विशेषताओं को पारित करना दर्दनाक साबित हो रहा था - यह मेरे लिए इसे हल कर दिया, धन्यवाद!
Terry_Brown

Maxlength साथ EditorFor मेरे लिए काम नहीं करता है (TextBoxFor दूसरे पर करता है)
Drejc

@tJerdhans, मैंने अपने css को कस्टमाइज़ करने के लिए इस कोड का उपयोग किया। यह काम करता है लेकिन दुर्भाग्य से यह मूल सीएसएस मूल्यों को बदल देता है। इसके बजाय मैं इसे मूल css में कैसे जोड़ सकता हूं ?
रोजी कासिम

33

इसमें कोई भी उत्तर या @ Html.EditorFor के लिए HTML विशेषताओं को सेट करने में किसी भी अन्य सूत्र ने मेरी बहुत मदद नहीं की। हालाँकि, मुझे एक शानदार उत्तर मिला

स्टाइलिंग एक @ Html.EditorFor सहायक

मैंने एक ही दृष्टिकोण का उपयोग किया और बहुत सारे अतिरिक्त कोड लिखे बिना इसने खूबसूरती से काम किया। ध्यान दें कि Html.EditorFor के html आउटपुट की id विशेषता सेट है। दृश्य कोड

<style type="text/css">
#dob
{
   width:6em;
}
</style>

@using (Html.BeginForm())
{
   Enter date: 
   @Html.EditorFor(m => m.DateOfBirth, null, "dob", null)
}

डेटा एनोटेशन और दिनांक स्वरूपण के साथ मॉडल संपत्ति "dd MMM yyyy" के रूप में

[Required(ErrorMessage= "Date of birth is required")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd MMM yyyy}")]
public DateTime DateOfBirth { get; set; }

पूरे अतिरिक्त कोड को लिखे बिना एक आकर्षण की तरह काम किया। यह उत्तर ASP.NET MVC 3 रेजर C # का उपयोग करता है।


1
MVC4 में भी मेरे लिए वास्तव में अच्छी तरह से काम किया।
14

1
प्रारूपण ने काम किया लेकिन अब बॉक्स को प्रभावी ढंग से अक्षम करने वाले डेटा के लिए शून्य वापस कर दिया गया है।
जो

2
मुझे नहीं पता कि यह एमवीसी लोगों के साथ क्या है, यह ऐसा है जैसे किसी ने भी एक वेबसाइट नहीं लिखी है जो संख्याओं के लिए कई भाषाओं और प्रारूपों के साथ काम करता है।
adudley

बहुत अच्छा। यह सरल है, यह काम करता है, और यह वास्तव में विकल्प प्रदान करने के बजाय ओपी के प्रश्न का उत्तर देता है। MVC4 का उपयोग करना।
ड्रेकोनिस

चेतावनी: डेटटाइम्स टाइप = "डेटाइम" के रूप में प्रस्तुत किए जाते हैं, जो एक जन्मतिथि के लिए गलत है, और कुछ ब्राउज़र (जैसे फ़ायरफ़ॉक्स मोबाइल) वास्तव में उस इनपुट प्रकार का सही ढंग से समर्थन करते हैं, जिसमें एक समय घटक भी शामिल है जो शायद सत्यापन पास नहीं करेगा और मुश्किल है या उपयोगकर्ता को हटाने के लिए असंभव है।
briary

25

किरण चंद के ब्लॉग पोस्ट को देखना चाहते हैं , वे इस तरह के दृश्य मॉडल पर कस्टम मेटाडेटा का उपयोग करते हैं:

[HtmlProperties(Size = 5, MaxLength = 10)]
public string Title { get; set; }

यह कस्टम टेम्पलेट्स के साथ संयुक्त है जो मेटाडेटा का उपयोग करता है। मेरी राय में एक साफ और सरल दृष्टिकोण लेकिन मैं इस सामान्य उपयोग के मामले को बिल्ट-इन एमवीसी देखना चाहता हूं।


71
क्या तुम मजाक कर रहे हो? यह इतनी आसान बात के लिए बहुत अधिक है। अधिक से अधिक मैं शुद्ध एचटीएमएल में वापस जा रहा हूं और एमवीसी फूला हुआ सहायक तरीकों को भूल रहा हूं। 5 मिनट पहले मेरे पास एक साधारण टेक्स्टबॉक्स था जिसने सफलतापूर्वक एक जेकरी डेटपिकर लॉन्च किया था। अब सिर्फ इसलिए कि मैं इसे बदलना चाहता था कि यह पूर्व-लोड की गई तारीख के प्रारूप को कैसे प्रारूपित करता है, मुझे इसे एक EditorFor में बदलना पड़ा। लेकिन अब अचानक से मैं अपने खुद के HTML विशेषताओं को निर्दिष्ट नहीं कर सकता, बिना इन अतिरंजित कस्टम विस्तार विधियों और सहायकों को लिखे बिना। क्या मजाक है। एक सरल तरीका होना चाहिए, आप पागल प्रोफेसरों को नहीं जानते कि कब रोकना है।
आरोन

1
मुझे लगता है कि आप संदर्भों को मिला रहे हैं। आपके द्वारा प्रदान किए गए लिंक के साथ आप अपने स्वयं के आकार और अधिकतम गति प्राप्त करने वाले प्रत्येक के साथ दो अलग-अलग संपादक कॉल कैसे कर सकते हैं? यदि आप EditorFor का उपयोग नहीं करना चाहते हैं, तो आप हमेशा TextBox सहायक या सरल HTML का उपयोग कर सकते हैं। लेकिन यह सवाल नहीं है!
chandmk

@Aaron नवीनतम MVC के रूप में, आप अतिरिक्त HTML विशेषताओं को EditorForइसे पास करके निर्दिष्ट कर सकते हैं :new { htmlAttributes: { @class = "yourclass" } }
JoeBrockhaus

17

मुझे आश्चर्य है कि किसी ने इसे "अतिरिक्त दृश्य" में पारित करने और दूसरी तरफ इसे पढ़ने का उल्लेख नहीं किया।

देखें (लाइन ब्रेक के साथ, स्पष्टता के लिए):

<%= Html.EditorFor(c => c.propertyname, new
    {
        htmlAttributes = new
        {
            @class = "myClass"
        }
    }
)%>

संपादक टेम्प्लेट:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<string>" %>

<%= Html.TextBox("", Model, ViewData["htmlAttributes"])) %>

इस पर बिल्डिंग मैंने एक सहायक बनाया जो विशेषताओं को ध्यान में रखता है - stackoverflow.com/a/11498094/79842
कॉलिन बोवरन

6

समस्या यह है कि, आपके टेम्पलेट में कई HTML तत्व हो सकते हैं, इसलिए MVC को पता नहीं होगा कि कौन सा आपके आकार / वर्ग को लागू करेगा। आपको इसे स्वयं परिभाषित करना होगा।

अपनी खुद की कक्षा को TextBoxViewModel नामक अपने टेम्पलेट से प्राप्त करें:

public class TextBoxViewModel
{
  public string Value { get; set; }
  IDictionary<string, object> moreAttributes;
  public TextBoxViewModel(string value, IDictionary<string, object> moreAttributes)
  {
    // set class properties here
  }
  public string GetAttributesString()
  {
     return string.Join(" ", moreAttributes.Select(x => x.Key + "='" + x.Value + "'").ToArray()); // don't forget to encode
  }

}

टेम्पलेट में आप ऐसा कर सकते हैं:

<input value="<%= Model.Value %>" <%= Model.GetAttributesString() %> />

आपके विचार में आप करते हैं:

<%= Html.EditorFor(x => x.StringValue) %>
or
<%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue, new IDictionary<string, object> { {'class', 'myclass'}, {'size', 15}}) %>

पहला रूप स्ट्रिंग के लिए डिफ़ॉल्ट टेम्पलेट प्रस्तुत करेगा। दूसरा रूप कस्टम टेम्पलेट को प्रस्तुत करेगा।

वैकल्पिक वाक्यविन्यास धाराप्रवाह इंटरफ़ेस का उपयोग करें:

public class TextBoxViewModel
{
  public string Value { get; set; }
  IDictionary<string, object> moreAttributes;
  public TextBoxViewModel(string value, IDictionary<string, object> moreAttributes)
  {
    // set class properties here
    moreAttributes = new Dictionary<string, object>();
  }

  public TextBoxViewModel Attr(string name, object value)
  {
     moreAttributes[name] = value;
     return this;
  }

}

   // and in the view
   <%= Html.EditorFor(x => new TextBoxViewModel(x.StringValue).Attr("class", "myclass").Attr("size", 15) %>

ध्यान दें कि देखने में ऐसा करने के बजाय, आप इसे नियंत्रक में भी कर सकते हैं, या ViewModel में बहुत बेहतर:

public ActionResult Action()
{
  // now you can Html.EditorFor(x => x.StringValue) and it will pick attributes
  return View(new { StringValue = new TextBoxViewModel(x.StringValue).Attr("class", "myclass").Attr("size", 15) });
}

यह भी ध्यान दें कि आप आधार टेम्प्लेटव्यूमॉडल क्लास बना सकते हैं - आपके सभी व्यू टेम्प्लेट के लिए एक सामान्य आधार - जिसमें विशेषताओं / आदि के लिए बुनियादी समर्थन होगा।

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


मुझे लगता है कि इससे निपटने का एक बेहतर तरीका है जैसा कि मैंने यहां बताया है stackoverflow.com/questions/1647609/… ... संक्षेप में कुछ इस तरह से करना कि WPF समस्या को संभालता है ... मनमानी शैली तत्व (इस मामले में) विशेषताएँ) टेम्प्लेट में पास हो जाती हैं और टेम्प्लेट यह तय करता है कि यह किस आंतरिक तत्व को शैली को लागू करेगा ...
vdhant

6

मुझे लगता है कि CSS का उपयोग करने का तरीका है। काश मैं XAML की तरह .NET कोडिंग के साथ अधिक कर सकता, लेकिन ब्राउज़र में सीएसएस राजा है।

Site.css

#account-note-input { 
  width:1000px; 
  height:100px; 
} 

.cshtml

<div class="editor-label"> 
  @Html.LabelFor(model => model.Note) 
</div> 
<div class="editor-field"> 
  @Html.EditorFor(model => model.Note, null, "account-note-input", null) 
  @Html.ValidationMessageFor(model => model.Note) 
</div>

जो


EditorForटेम्पलेट का उपयोग करते समय नियंत्रण विशिष्ट सीएसएस परिवर्तन करने के लिए यह बहुत अच्छी तरह से काम करता है । मैं MVC4 का उपयोग कर रहा हूं और इसने बहुत अच्छा काम किया है।
atconway

6

MVC 5 में, यदि आप कोई विशेषता जोड़ना चाहते हैं तो आप बस कर सकते हैं

 @Html.EditorFor(m => m.Name, new { htmlAttributes = new { @required = "true", @anotherAttribute = "whatever" } })

इस ब्लॉग से मिली जानकारी


3

आप अपने गुणों के लिए विशेषताओं को परिभाषित कर सकते हैं।

[StringLength(100)]
public string Body { get; set; }

इस रूप में जाना जाता है System.ComponentModel.DataAnnotations। अगर आपको नहीं मिल रहा हैValidationAttribute जिसकी आपको आवश्यकता है तो आप कस्टम विशेषताओं को परिभाषित कर सकते हैं।

सर्वश्रेष्ठ सादर, कार्लोस


3
वह एचटीएमएल-विशेषताओं के बारे में बात करता है जैसे कि अधिकतम गति सत्यापन नहीं।
मथियास एफ

मुझे उम्मीद है कि दृश्य इंजन DataAnnotations भी पालन करेगा। मैंने अभी तक MVC2 के साथ खिलवाड़ नहीं किया है।
mxmissile

मैंने StringLength डेटा एनोटेशन की कोशिश की। यह EditorFor के साथ काम नहीं किया।
wayne.blackmon 17

3

यह सबसे पतला समाधान नहीं हो सकता है, लेकिन यह सीधा है। आप HtmlHelper.EditorFor वर्ग के लिए एक्सटेंशन लिख सकते हैं। उस विस्तार में, आप एक विकल्प पैरामीटर की आपूर्ति कर सकते हैं जो सहायक के लिए ViewData के विकल्प लिखेंगे। यहाँ कुछ कोड है:

सबसे पहले, विस्तार विधि:

public static MvcHtmlString EditorFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, TemplateOptions options)
{
    return helper.EditorFor(expression, options.TemplateName, new
    {
        cssClass = options.CssClass
    });
}

अगला, विकल्प ऑब्जेक्ट:

public class TemplateOptions
{
    public string TemplateName { get; set; }
    public string CssClass { get; set; }
    // other properties for info you'd like to pass to your templates,
    // and by using an options object, you avoid method overload bloat.
}

और अंत में, यहाँ String.ascx टेम्पलेट की रेखा है:

<%= Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = ViewData["cssClass"] ?? "" }) %>

सच कहूं, तो मुझे लगता है कि यह सीधा और गरीब आत्मा के लिए स्पष्ट है जिसे सड़क के नीचे अपना कोड बनाए रखना है। और जानकारी के विभिन्न बिट्स के लिए विस्तार करना आसान है जिसे आप अपने टेम्प्लेट में पास करना चाहते हैं। यह मेरे लिए अब तक अच्छी तरह से एक परियोजना में काम कर रहा है, जहां मैं आसपास के HTML को मानकीकृत करने में मदद करने के लिए टेम्पलेट के एक सेट में जितना संभव हो उतना लपेटने की कोशिश कर रहा हूं, एक ला http://bradwilson.typepad.com/blog/2009/ 10 / aspnet-mvc-2-templates-part-5-master-page-templates.html


3

मैंने अपने प्रश्न का उत्तर देने के लिए एक ब्लॉग प्रविष्टि लिखी

टेम्पलेट के लिए html विशेषताएँ समर्थन जोड़ना - ASP.Net MVC 2.0 बीटा


(देखें) मॉडल पर HTML स्वरूपण गुण डालने का विचार MVC के विचार को देखने और तर्क को अलग करने के खिलाफ है! क्या होगा यदि मॉडल को HTML में विभिन्न अभ्यावेदन की आवश्यकता होगी?
संतलदम्

2
@Saintedlama: यह बिल्कुल ठीक पर डेटा टिप्पणियों को रखना है viewmodel क्योंकि viewmodel का एकमात्र उद्देश्य के लिए एक संरचित डेटा मॉडल प्रदान करना है, दृश्यमॉडल के साथ भ्रमित नहीं होना चाहिए , जो एमवीसी शब्दावली में आमतौर पर एक डीबी इकाई का प्रतिनिधित्व करता है, जिसमें कोई दृश्य-संबंधित गुण नहीं होना चाहिए। यह कहते हुए कि, यह दुर्भाग्यपूर्ण है कि उनके व्यूअमॉडल एनोटेशन एचटीएमएलएक्स से शुरू होते हैं क्योंकि इसका मतलब है कि एचटीएमएल एक प्रस्तुति परत के रूप में है, लेकिन एक रेखा कहीं न कहीं खींची जानी है। :) इसके अलावा, अगर वह कहती है कि सिल्वरलाइट ऐप के लिए व्यूमॉडल का पुन: उपयोग किया जाता है, तो वह आसानी से अपने व्यूमॉडल में SL विशेषताओं को जोड़ सकता है।
बोरिस बी।

3

मुझे नहीं पता कि यह Html.EditorFor के लिए काम क्यों नहीं करता है, लेकिन मैंने TextBoxFor की कोशिश की और यह मेरे लिए काम कर गया।

@Html.TextBoxFor(m => m.Name, new { Class = "className", Size = "40"})

... और सत्यापन कार्य भी।


आपको जरूरत है@class = "className"
जोबोराहॉस

2

मेरे अभ्यास में मैंने पाया कि इसमें केवल एक HtmlHelper के साथ EditorTemplates का उपयोग करना सबसे अच्छा है - टेक्स्टबॉक्स जो कि ज्यादातर मामलों में है। अगर मुझे अधिक जटिल HTML संरचना के लिए टेम्पलेट चाहिए, तो मैं एक अलग HtmlHelper लिखूंगा।

यह देखते हुए कि हम TextBox के htmlAttributes के स्थान पर संपूर्ण ViewData ऑब्जेक्ट को चिपका सकते हैं। इसके अलावा, हम ViewData के कुछ गुणों के लिए कुछ कस्टमाइज़ेशन कोड लिख सकते हैं यदि उन्हें विशेष उपचार की आवश्यकता हो:

@model DateTime?
@*
    1) applies class datepicker to the input;
    2) applies additionalViewData object to the attributes of the input
    3) applies property "format" to the format of the input date.
*@
@{
    if (ViewData["class"] != null) { ViewData["class"] += " datepicker"; }
    else { ViewData["class"] = " datepicker"; }
    string format = "MM/dd/yyyy";
    if (ViewData["format"] != null)
    {
        format = ViewData["format"].ToString();
        ViewData.Remove("format");
    }
}

@Html.TextBox("", (Model.HasValue ? Model.Value.ToString(format) : string.Empty), ViewData)

नीचे दिए गए वाक्य और आउटपुट किए गए HTML में वाक्य रचना के उदाहरण हैं:

@Html.EditorFor(m => m.Date)
<input class="datepicker" data-val="true" data-val-required="&amp;#39;Date&amp;#39; must not be empty." id="Date" name="Date" type="text" value="01/08/2012">
@Html.EditorFor(m => m.Date, new { @class = "myClass", @format = "M/dd" })
<input class="myClass datepicker" data-val="true" data-val-required="&amp;#39;Date&amp;#39; must not be empty." id="Date" name="Date" type="text" value="1/08">

2

क्योंकि सवाल EditorFor के लिए है न कि TextBoxFor WEFX के सुझाव से काम नहीं चलता।

अलग-अलग इनपुट बॉक्स बदलने के लिए, आप EditorFor विधि के आउटपुट को संसाधित कर सकते हैं:

<%: new HtmlString(Html.EditorFor(m=>m.propertyname).ToString().Replace("class=\"text-box single-line\"", "class=\"text-box single-line my500pxWideClass\"")) %>

आपके सभी EditorFors को बदलना भी संभव है, क्योंकि यह MVC EditorFor टेक्स्ट बॉक्स के वर्ग को .text -box के रूप में सेट करता है , इसलिए आप इस शैली को अपनी स्टाइलशीट में या पृष्ठ पर देख सकते हैं।

.text-box {
    width: 80em;
}

इसके अतिरिक्त, आप के लिए शैली सेट कर सकते हैं

input[type="text"] {
    width: 200px;
}
  • यह ओवरराइड करता है .टेक्स्ट-बॉक्स और सभी इनपुट टेक्स्ट बॉक्स, EditorFor या अन्यथा बदल देगा।

सभी EditorFor () टेक्स्ट बॉक्स इनपुट प्रकार = "टेक्स्ट" नहीं हैं। DateTime गुण टाइप = "डेटटाइम" के रूप में प्रस्तुत करने लगते हैं।
19 नवबंर

2

मैंने MVC3 में TextBox की चौड़ाई निर्धारित करने के साथ भी समस्या थी, जबकि Clsss विशेषता को TextArea नियंत्रण के लिए काम किया था, लेकिन TextBoxFor नियंत्रण या EditorFor नियंत्रण के लिए नहीं:

मैंने कोशिश की और मेरे लिए काम किया:

@ Html.TextBoxFor (model => model.Title, new {Class = "textBox", style = "width: 90%;"})

इस मामले में भी मान्यताएँ पूरी तरह से काम कर रही हैं।


2

एक तरह से आप इसे प्राप्त कर सकते हैं यह दृश्य मॉडल पर प्रतिनिधियों को इस तरह से विशेष रेंडरिंग को प्रिंट करने से निपटने के लिए है। मैंने इसे पेजिंग क्लास के लिए किया है, मैं मॉडल पर एक सार्वजनिक संपत्ति को उजागर करता हूंFunc<int, string> RenderUrl इससे निपटने के ।

तो परिभाषित करें कि कस्टम बिट कैसे लिखा जाएगा:

Model.Paging.RenderUrl = (page) => { return string.Concat(@"/foo/", page); };

Pagingवर्ग के लिए दृश्य आउटपुट :

@Html.DisplayFor(m => m.Paging)

... और वास्तविक Pagingदृश्य के लिए:

@model Paging
@if (Model.Pages > 1)
{
    <ul class="paging">
    @for (int page = 1; page <= Model.Pages; page++)
    {
        <li><a href="@Model.RenderUrl(page)">@page</a></li>
    }
    </ul>
}

इसे अधिक जटिल मामलों के रूप में देखा जा सकता है, लेकिन मैं इन पेजर्स का हर जगह उपयोग करता हूं और इन्हें प्रस्तुत करने के लिए एक ही बॉयलरप्लेट कोड देखकर खड़ा नहीं हो सकता।


1

अद्यतन: एचएम, जाहिर है यह काम नहीं करेगा क्योंकि मॉडल मूल्य द्वारा पारित किया जाता है ताकि विशेषताएँ संरक्षित न हों; लेकिन मैं इस जवाब को एक विचार के रूप में छोड़ता हूं।

एक अन्य समाधान, मुझे लगता है, अपने स्वयं के टेक्स्टबॉक्स / आदि सहायकों को जोड़ना होगा, जो मॉडल पर अपनी विशेषताओं के लिए जाँच करेगा।

public class ViewModel
{
  [MyAddAttribute("class", "myclass")]
  public string StringValue { get; set; }
}

public class MyExtensions
{
  public static IDictionary<string, object> GetMyAttributes(object model)
  {
     // kind of prototype code...
     return model.GetType().GetCustomAttributes(typeof(MyAddAttribute)).OfType<MyAddAttribute>().ToDictionary(
          x => x.Name, x => x.Value);
  }
}

<!-- in the template -->
<%= Html.TextBox("Name", Model, MyExtensions.GetMyAttributes(Model)) %>

यह एक आसान है, लेकिन उतना ठोस / लचीला नहीं है।


1

यह यहां समाधान पाने का सबसे साफ और सबसे सुंदर / सरल तरीका है।

शानदार ब्लॉग पोस्ट और पागल प्रोफेसर की तरह कस्टम विस्तार / सहायक तरीकों को लिखने में कोई गन्दा ओवरकिल नहीं।

http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx


0

मुझे वास्तव में @tjeerdans का उत्तर पसंद आया, जो String.ascx नाम के EditorTemplate / Views / Shared / EditorTemplates फ़ोल्डर में उपयोग होता है। यह इस सवाल का सबसे सीधा-सीधा जवाब है। हालाँकि, मुझे रेजर सिंटैक्स का उपयोग करके एक टेम्पलेट चाहिए था। इसके अलावा, ऐसा लगता है कि MVC3 स्ट्रिंग टेम्पलेट को डिफ़ॉल्ट के रूप में उपयोग करता है (देखें StackOverflow प्रश्न " स्ट्रिंग्स के लिए mvc डिस्प्ले टेम्पलेट पूर्णांक के लिए उपयोग किया जाता है ") इसलिए आपको स्ट्रिंग के बजाय मॉडल को ऑब्जेक्ट पर सेट करने की आवश्यकता है। मेरा टेम्प्लेट अब तक काम कर रहा है:

@model object 

@{  int size = 10; int maxLength = 100; }

@if (ViewData["size"] != null) {
    Int32.TryParse((string)ViewData["size"], out size); 
} 

@if (ViewData["maxLength"] != null) {
    Int32.TryParse((string)ViewData["maxLength"], out maxLength); 
}

@Html.TextBox("", Model, new { Size = size, MaxLength = maxLength})

0

मैंने इसे हल किया !!
रेजर के लिए वाक्य रचना है:
@Html.TextAreaFor(m=>m.Address, new { style="Width:174px" })यह पाठ क्षेत्र की चौड़ाई को उस चौड़ाई में समायोजित करता है जिसे मैंने शैली पैरामीटर में परिभाषित किया है।
ASPx के लिए वाक्य रचना है:
<%=Html.TextAreaFor(m => m.Description, new { cols = "20", rows = "15", style="Width:174px" })%>
यह चाल चलेगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.