Html.TextBoxFor के साथ डिफ़ॉल्ट मान कैसे सेट करें?


198

सरल प्रश्न, यदि आप ASP.NET MVC फ्रेमवर्क 1 से Html हेल्पर का उपयोग करते हैं, तो टेक्स्टबॉक्स पर डिफ़ॉल्ट मान सेट करना आसान है क्योंकि एक अधिभार है Html.TextBox(string name, object value)। जब मैंने Html.TextBoxFor विधि का उपयोग करने की कोशिश की , तो मेरा पहला अनुमान निम्नलिखित प्रयास करने का था जो काम नहीं किया:

<%: Html.TextBoxFor(x => x.Age, new { value = "0"}) %>

क्या मुझे अभी के लिए Html.TextBox (string, object) के साथ रहना चाहिए?


इसका उपयोग करें <%: Html.TextBoxFor (x => x.Age, new {Value = "0"})%>, मान में एक छोटा सा परिवर्तन V पूंजी करें।
मोहन सिंह

जवाबों:


354

आप यह कोशिश कर सकते हैं

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>

49
यह जानने के लिए उत्सुक है कि पूंजी 'V' काम क्यों करती है और 'V' कम नहीं करती है? साथ ही, यह समाधान आयु के लिए मॉडल मान को ओवरराइड करता है, भले ही वह मौजूद हो।
डेरेक हुन्जीकर

74
C # msdn.microsoft.com/en-us/library/x9fsa0sw.aspx के लिए छोटे v के साथ मूल्य है । इसलिए मुझे लगता है कि यह काम क्यों नहीं करता है।
Tassadaque

3
टिप्पणी को उकेरा क्योंकि एक उत्तर के लिए इस अस्पष्ट और व्यावहारिक लग रहा था ... अपर्याप्त था।
ईधव

9
यह अभी भी उत्सुक है कि @value काम नहीं करता है। आसानी से C # के लिए एक कीवर्ड भी है, लेकिन @readonly बिना किसी समस्या के काम करता है।
डिएगो

16
ब्राउज़र में HTML स्रोत <इनपुट मान = "0" आईडी = "आयु" नाम = "आयु" प्रकार = "पाठ" मूल्य = "" /> जब @Value का उपयोग कर रहा है। इनपुट टैग में "मान" के साथ "मान" और "मान" दोनों हैं।
रिकी

59

यह MVC3 और MVC4 के लिए काम करना चाहिए

 @Html.TextBoxFor(m => m.Age, new { @Value = "12" }) 

यदि आप चाहते हैं कि यह एक छिपा हुआ क्षेत्र हो

 @Html.TextBoxFor(m => m.Age, new { @Value = "12",@type="hidden" }) 

21
छिपे हुए फ़ील्ड के लिए, बस @ Html.HiddenFor (m => m.Age, new {@Value = "12"}) का उपयोग करें
Buginator

अच्छा एक @ Html.HiddenFor (एम => m.Age, नए {@value = "12"}) नहीं wokring
RollerCosta

और आप इस तरह एक हार्ड कोडित डिफ़ॉल्ट मान क्यों छिपाएंगे? नॉन सेंस
एंटोनी पेल्लेटियर

31

यह पता चला है कि यदि आप अपने नियंत्रक के भीतर मॉडल को दृश्य विधि में निर्दिष्ट नहीं करते हैं, तो यह आपके लिए डिफ़ॉल्ट मानों के साथ एक ऑब्जेक्ट नहीं बनाता है।

[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Create()
{
  // Loads default values
  Instructor i = new Instructor();
  return View("Create", i);
}

[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Create()
{
  // Does not load default values from instructor
  return View("Create");
}

अधिक संभावना यह है कि यह MVC बग या फीचर है, चूंकि Html.PasswordFor (m => m.Password, new {class = "form-control", value = "default" को लगभग उसी html में रेंडर किया गया है, और "default" जाओ मूल्य को सफलतापूर्वक प्रदर्शित किया जा रहा है। उदाहरण के लिए, मान = Model.Email काम करता है, लेकिन value = ViewBag.Email काम करता है। इसलिए यह स्वीकृत उत्तर बेहतर और साफ-सुथरा है, इसलिए हैकिंग नहीं।
ZZZ

क्या है Instructor?
सेसाबा टोथ

20

डिफ़ॉल्ट मान आपकी Model.Ageसंपत्ति का मूल्य होगा । यह पूरे बिंदु की तरह है।


3
लगता है कि यह तब बुरा विचार है जब मॉडल डिफ़ॉल्ट मानों का प्रबंधन करता है। जब मॉडल के समान संग्रह के लिए अलग-अलग डिफ़ॉल्ट मान की आवश्यकता हो, तो क्या किया जाना चाहिए?
17

@RredCat सहमत, यह यूआई लेयर के पृथक्करण को प्रभावित करता है
इवान एम

18

आप बस कर सकते हैं:

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>

या बेहतर, यह डिफ़ॉल्ट मान '0' पर जाएगा यदि मॉडल अशक्त है, उदाहरण के लिए यदि आपके पास संपादन और संपादन दोनों के लिए समान दृश्य है:

@Html.TextBoxFor(x => x.Age, new { @Value = (Model==null) ? "0" : Model.Age.ToString() })

11

मान = "0" @ Html.TextBoxfor के लिए अवशिष्ट मान निर्धारित करेगा

इसका मामला संवेदनशील "v" राजधानी होना चाहिए

नीचे काम कर रहा है उदाहरण:

@Html.TextBoxFor(m => m.Nights, 
    new { @min = "1", @max = "10", @type = "number", @id = "Nights", @name = "Nights", Value = "1" })

9

यहां मैंने इसे हल किया है। यह काम करता है अगर आप इसका उपयोग संपादन के लिए भी करते हैं।

@Html.TextBoxFor(m => m.Age, new { Value = Model.Age.ToString() ?? "0" })

यदि आयु शून्य है .. तो आप एक शून्य सूचक अपवाद प्राप्त करने जा रहे हैं क्योंकि ?? ToString () की वापसी की जाँच करने का प्रयास करने जा रहा है।
eaglei22

@ eaglei22 Nullable <T> .ToString () मान रिक्त होने पर एक रिक्त स्ट्रिंग लौटाएगा।
टॉम लिंट

एक गुमनाम वस्तु में बाँध मॉडल कैसे दिखाने के लिए धन्यवाद
शून्य

9

यह काम मेरे लिए

@Html.TextBoxFor(model => model.Age, htmlAttributes: new { @Value = "" })

नामित पैरामीटर के लिए +1 जो विशेष रूप से कॉपी / पेस्टेबल कोड में सहायक होता है और एक जो कई अधिभार के साथ एक विधि का उपयोग करता है
एकस

8

उपयोग करना @Valueएक हैक है, क्योंकि यह दो विशेषताओं को आउटपुट करता है, जैसे:

<input type="..." Value="foo" value=""/>

आपको इसके बजाय यह करना चाहिए:

@Html.TextBox(Html.NameFor(p => p.FirstName).ToString(), "foo")

7

यह मेरे लिए काम करता है, इस तरह हम खाली स्ट्रिंग के लिए डिफ़ॉल्ट मान सेट करते हैं

@Html.TextBoxFor(m => m.Id, new { @Value = "" })

2
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन कुछ संदर्भों को शामिल करना बेहतर होगा, यह बताते हुए कि यह कैसे काम करता है और इसका उपयोग कब करना है। कोड-केवल उत्तर लंबे समय में उपयोगी नहीं हैं।
बोनो

@ बोनो ने कुछ टिप्पणियां
जोड़ीं

5

यदि आपके पास संपादन और जोड़ने दोनों के लिए एक आंशिक पृष्ठ है, तो मैं 0निम्न करने के लिए डिफ़ॉल्ट मान का उपयोग करता हूं :

@Html.TextBox("Age", Model.Age ?? 0)

इस तरह से 0अगर यह मौजूद है तो यह परेशान या वास्तविक उम्र होगा।


1
यदि आयु एक अंतर है, तो यह काम नहीं करेगा; यह एक अशक्त int होने की आवश्यकता होगी।
जस्टिन सेल्फ

0

यह भी कोशिश करें, कि नया {} को हटा दें और इसे स्ट्रिंग के साथ बदलें।

<%: Html.TextBoxFor(x => x.Age,"0") %>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.