/ / क्या Html.TextBox मॉडल के बजाय Request.Params का उपयोग करता है? - asp.net-mvc, html-helper

क्या Html.TextBox मॉडल के बजाय Request.Params का उपयोग करता है? - asp.net-mvc, एचटीएमएल-सहायक

मेरे पास एक साधारण परीक्षा आवेदन है:

आदर्श:

public class Counter
{
public int Count { get; set; }

public Counter()
{
Count = 4;
}
}

नियंत्रक:

public class TestController : Controller
{
public ActionResult Increment(Counter counter)
{
counter.Count++;
return View(counter);
}
}

राय:

<form action="/test/increment" method="post">
<input type="text" name="Count" value="<%= Model.Count %>" />
<input type="submit" value="Submit" />
</form>

सबमिट पर क्लिक करने पर मुझे ऐसे मूल्य मिलते हैं:

5, 6, 7, 8, ...

Html.TextBox के साथ मुझे उसी व्यवहार की उम्मीद थी

<form action="/test/increment" method="post">
<%= Html.TextBox("Count") %>
<input type="submit" value="Submit" />
</form>

लेकिन वास्तव में मिल गया

5, 5, 5, 5.

ऐसा लगता है कि Html.TextBox मॉडल के बजाय Request.Params का उपयोग करता है?

उत्तर:

जवाब के लिए 8 № 1

Html.TextBox () आंतरिक रूप से ViewData का उपयोग करता है।Eval () विधि जो पहले ViewData.ModelState शब्दकोश से एक मान प्राप्त करने का प्रयास करती है और इसके बाद ViewData.Model की एक संपत्ति से मान प्राप्त करने का प्रयास करती है। यह अमान्य फ़ॉर्म सबमिट करने के बाद दर्ज किए गए मानों को बहाल करने की अनुमति देने के लिए किया जाता है।

ViewData.ModelState शब्दकोश से गणना मूल्य हटाने से मदद मिलती है:

public ActionResult Increment(Counter counter)
{
counter.Count++;
ViewData.ModelState.Remove("Count");
return View(counter);
}

एक और उपाय GET और POST संचालन के लिए दो अलग-अलग नियंत्रक विधियाँ बनाना है:

public ActionResult Increment(int? count)
{
Counter counter = new Counter();

if (count != null)
counter.Count = count.Value;

return View("Increment", counter);
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Increment(Counter counter)
{
counter.Count++;

return RedirectToAction("Increment", counter);
}

काउंटर ऑब्जेक्ट को TempData डिक्शनरी के माध्यम से भी पास किया जा सकता है।

आपको लेख में रुचि भी हो सकती है ViewData.Eval () के साथ फॉर्म फ़ील्ड फिर से खोलें स्टीफन वाल्थर द्वारा।


उत्तर № 2 के लिए 1

यहाँ यह मुद्दा नहीं है

<%= Html.TextBox("Count") %>

निर्दिष्ट करने के बराबर है

<%= Html.TextBox("Count", null) %>

जो ModelStateDictionary से मिलान मूल्य ("गणना" नाम) खींच देगा।

लेकिन फिर भी, स्पष्ट रूप से अंदर से गुजर रहा है

<%= Html.TextBox("Count", Model.Count) %>

alex2k8 द्वारा वर्णित समान व्यवहार के परिणाम।


जवाब के लिए 0 № 3

Html.TextBox में एक से अधिक पैरामीटर हैं। यदि पैरामीटर इनपुट तत्व का नाम या आईडी है, और दूसरा मूल्य है ...

इसलिए इस तरह से अपना टेक्स्टबॉक्स हेल्पर लिखें:

<%= Html.TextBox("Count",Model.Count) %>

चियर्स