2011-11-16 15 views
5

मैं एक एमवीसी 3 रेजर व्यू का उपयोग कर निम्नलिखित एचटीएमएल प्रस्तुत करने की कोशिश कर रहा हूं:एएसपी.नेट एमवीसी 3 रेजर का उपयोग कर ऑब्जेक्ट वैल्यू के साथ HtmlAttributes कैसे प्रस्तुत करें?

<input id="EffectiveDate" name="EffectiveDate" type="date" data-options='{"mode": "flipbox"}' /> 

मैं प्रस्तुत करने के लिए डेटा-विकल्प विशेषता में उद्धरण चिह्न प्राप्त करने में असमर्थ रहा हूं। कोई फर्क नहीं पड़ता कि मैं क्या कोशिश करता हूं, उन्हें &quot;

के रूप में प्रस्तुत किया जाता है। मेरे दृश्य में मैंने कई प्रयास किए हैं:

@Html.TextBoxFor(model => model.EffectiveDate, new { type = "date", data_options= " { 'mode':'flipbox' }"}) 

और

@Html.TextBoxFor(model => model.EffectiveDate, new { type = "date", data_options= @Html.Raw("{\"mode\":\"flipbox\"}")}) 

किसी भी सुझाव के बारे में कोई सुझाव उद्धरण चिह्न डीकोड करें?

+0

आप उस क्षेत्र के साथ क्या कर रहे हैं? यदि आप jquery का उपयोग कर रहे हैं, तो आपको इसे HTML स्ट्रिंग के रूप में पढ़ना पड़ सकता है, और इसका उपयोग करने से पहले इसे jquery में डीकोड करना पड़ सकता है। – jzm

+0

मैं टेक्स्ट बॉक्स को डेट पिकर में बदलने के लिए एक jQuery मोबाइल प्लगइन का उपयोग कर रहा हूं। 'डेटा-विकल्प' विशेषता दिनांक पिकर विकल्पों को परिभाषित करती है। जैसा कि आप कह रहे हैं, jQuery डेटा-ऑब्जेक्ट ऑब्जेक्ट को डीकोड करता है, इसलिए सब कुछ ठीक काम करता है। लेकिन मैं जानना चाहता हूं कि मेरे कोड को साफ करने और भविष्य के संदर्भ के लिए दोनों को प्रतिपादन से पहले उद्धरण चिह्नों को कैसे डीकोड करना है। ऐसा लगता है कि मैं किसी बिंदु पर फिर से सामना कर सकता हूं। – xcer

उत्तर

4

आप एक MVC संपादक टेम्पलेट बनाकर ऐसा कर सकते हैं। सबसे पहले, "Views \ Shared" फ़ोल्डर के अंदर "EditorTemplates" नामक फ़ोल्डर बनाएं। फिर EditorTemplates फ़ोल्डर के अंदर DateTime.cshtml नामक फ़ाइल डालें।

तो फिर तुम बस EditorFor() विधि आपके विचार मॉडल की संपत्ति के खिलाफ इस तरह उपयोग कर सकते हैं (बशर्ते कि के प्रकार दिनांक समय की EFFECTIVEDATE संपत्ति):

@Html.EditorFor(m => m.EffectiveDate) 

DateTime.cshtml संपादक टेम्पलेट के लिए पूर्ण कोड ऐसा लगता है:

@model System.DateTime 
@{ 
    var id = this.ViewData.TemplateInfo.GetFullHtmlFieldId(""); 
    var name = this.ViewData.TemplateInfo.GetFullHtmlFieldName(""); 
} 
<input id="@id" name="@name" type="date" data-options='{"mode": "flipbox"}' /> 

यह आपके द्वारा प्राप्त किए जा रहे सटीक आउटपुट का उत्पादन करेगा।

+0

मैं इस क्षेत्र के लिए पहले से ही एक संपादक टेम्पलेट का उपयोग कर रहा हूं (इस मुद्दे से संबंधित कारणों के लिए), इसलिए यह दृष्टिकोण मेरे लिए अच्छा काम करेगा। धन्यवाद! और यह जानने के लिए @rdumont का धन्यवाद क्यों एमवीसी इनपुट एक्सटेंशन हमेशा गुणों को एन्कोड करेंगे। – xcer

1

एक बात निश्चित है: जब आप किसी भी डिफ़ॉल्ट एमवीसी इनपुट एक्सटेंशन (यानी टेक्स्टबॉक्स फोर) का उपयोग करते हैं तो विशेष प्रतीकों को हमेशा एन्कोड किया जाएगा। ऐसा इसलिए है क्योंकि टैगबिल्डर स्वयं, जिसे HtmlHelper एक्सटेंशन के लिए टैग बनाने के लिए उपयोग किया जाता है, HtmlEncode एस टैग में प्रत्येक विशेषता मान। आप TagBuilder स्रोत में देख सकते हैं:

private void AppendAttributes(StringBuilder sb) 
{ 
    foreach (var attribute in Attributes) 
    { 
     string key = attribute.Key; 
     if (String.Equals(key, "id", StringComparison.Ordinal /* case-sensitive */) && String.IsNullOrEmpty(attribute.Value)) 
     { 
      continue; // DevDiv Bugs #227595: don't output empty IDs 
     } 
     string value = HttpUtility.HtmlAttributeEncode(attribute.Value); 
     sb.Append(' ') 
      .Append(key) 
      .Append("=\"") 
      .Append(value) 
      .Append('"'); 
    } 
} 

जब से तुम कोई रास्ता नहीं पहले से ही डीकोड कि मूल्य भेजने के लिए है, तो आप जावास्क्रिप्ट में यह अपने आप को डिकोड करने के लिए किया है।

var value = $('<textarea/>').html(yourElement.data('options')).val(); 

आप निश्चित रूप से उस के लिए एक समारोह बनाने के लिए, चाहते हो सकता है: यहाँ एक अच्छी छोटी jQuery चाल है कि यह करना होगा है।

सूत्रों का कहना है:

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