ASP.NET MVC3 - @ Html.EditorFor के साथ textarea


209

मेरे पास ASP.NET MVC3 ऐप है और मेरे पास समाचार जोड़ने के लिए फॉर्म भी है। जब VS2010 ने डिफ़ॉल्ट दृश्य बनाया, मेरे पास केवल स्ट्रिंग डेटा के लिए पाठ इनपुट हैं, लेकिन मैं समाचार पाठ के लिए textarea रखना चाहता हूं। मैं इसे रेजर सिंटैक्स के साथ कैसे कर सकता हूं।

टेक्स्ट इनपुट इस तरह दिखता है:

@Html.EditorFor(model => model.Text)

संबंधित, यह देखने के लिए कैसे EditorTemplate को अनुकूलित करने के बारे में एक और प्रश्न का उत्तर देखें ।
जीरन

जवाबों:


375

आप [DataType]इस तरह अपने दृश्य मॉडल पर विशेषता का उपयोग कर सकते हैं :

public class MyViewModel
{
    [DataType(DataType.MultilineText)]
    public string Text { get; set; }
}

और फिर आपके पास एक नियंत्रक हो सकता है:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }
}

और एक दृश्य जो आपको चाहिए होता है:

@model AppName.Models.MyViewModel
@using (Html.BeginForm())
{
    @Html.EditorFor(x => x.Text)
    <input type="submit" value="OK" />
}

7
बहुत ज्यादा मैं क्या देख रहा था, लेकिन क्या होगा अगर मुझे पंक्तियों और कॉल एचटीएमएल विशेषताओं को निर्दिष्ट करने की आवश्यकता है?
जेसन

3
मुझे अभी भी स्रोत कोड में [वर्ग = "टेक्स्ट-बॉक्स सिंगल-लाइन"] मिल रहा है :(
स्टावरोस

7
बेहद जानकार और फिर भी इसे उतना ही सरल रखते हैं जितना कि यह सब कुछ बताता है और कदम से कदम बढ़ाता है। hail @ डारिन दिमित्रोव
समेट अलकन

@ जेसन स्टाइल के लिए सीएसएस का उपयोग करते हैं।
जो स्मो डे

DataAnnotationsFTW! धन्यवाद।
कोन

136

किसी ने विशेषताओं को जोड़ने के बारे में पूछा (विशेष रूप से, 'पंक्तियों' और 'कोल')। यदि आप रेजर का उपयोग कर रहे हैं, तो आप ऐसा कर सकते हैं:

@Html.TextAreaFor(model => model.Text, new { cols = 35, @rows = 3 })

ये मेरे लिए सही है। '@' का उपयोग कीवर्ड से बचने के लिए किया जाता है ताकि उन्हें चर / गुणों के रूप में माना जाए।


वास्तव में - यदि आप जानते हैं कि आपके क्षेत्र को कॉल / पंक्तियों के साथ एक पाठ क्षेत्र चाहिए, तो TextAreaFor के बजाय EditorFor का उपयोग करने का बहुत कम कारण है। किसी के पास एक कारण है कि आपको अभी भी EditorFor का उपयोग करना होगा और यह जानना होगा कि आपको cols / पंक्तियाँ निर्दिष्ट करने की आवश्यकता है?
जेम्स हग

95
@Html.TextAreaFor(model => model.Text)

6
मुझे यह तरीका बेहतर लगता है क्योंकि लोकप्रिय उत्तर में डेटाबेस मॉडल को संशोधित करना शामिल है, जिसका अर्थ है कि आपको EntityFramework का उपयोग करते हुए अंतर्निहित डेटाबेस को छोड़ना और पुन: बनाना है।
सियारन गलाघेर

6
डेटाटाइप एनोटेशन एंटिटी फ्रेमवर्क में एक रिफ्रेश के लिए बाध्य नहीं करता है।
तल्लमरिस

9
@ कैरन: इस कथन की घंटी बजनी चाहिए। यूआई को संशोधित करने के लिए डेटाबेस परत को बदलने की कोई आवश्यकता नहीं होनी चाहिए। एक प्रस्तुति ऑब्जेक्ट होना चाहिए, जो डेटाबेस ऑब्जेक्ट के लिए मैपर है। यूआर यूआई में डेटाबेस ऑब्जेक्ट का उपयोग कभी न करें।
फ्रेडरिक प्रेजेक

5
स्पष्ट होने के लिए, फ्रेडरिक जो बात कर रहा है, वह ऐसी कक्षाएं बना रहा है जो आपके DbContext में उपयोग की जाने वाली कक्षाओं से आपके डेटा डेटा का प्रतिनिधित्व करती हैं। अपने DbContext मॉडल को दृश्यों में पास न करें। एक दृश्य मॉडल वर्ग बनाएं, फिर db मॉडल से दृश्य मॉडल में आपके द्वारा देखभाल की जाने वाली जानकारी को स्थानांतरित करें, और इनपुट स्वीकार करते समय इसके विपरीत।
जिम यारब्रॉ

3
@FrederikPrijck मैं असहमत नहीं हूं, लेकिन क्या DRY प्रिंसिपल का उल्लंघन नहीं है? आपको सभी गुणों को एक वर्ग से दूसरे वर्ग में कॉपी करना होगा। क्या इसे करने का एक कम "सांसारिक" है, जो आपने पाया है?
जेम्स हैग ऑक्ट

1

अपने मॉडल में घोषणा करें

  [DataType(DataType.MultilineText)]
  public string urString { get; set; }

फिर .cshtml नीचे संपादक का उपयोग कर सकते हैं। आप TextArea आकार के लिए @cols और @rows का उपयोग कर सकते हैं

     @Html.EditorFor(model => model.urString, new { htmlAttributes = new { @class = "",@cols = 35, @rows = 3 } })

धन्यवाद !

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