Does Html.TextBox uses Request.Params instead of Model?

后端 未结 3 1003
时光取名叫无心
时光取名叫无心 2021-01-13 02:25

I have a simple test application:

Model:

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

    public Counter()
    {
        Count = 4;
           


        
相关标签:
3条回答
  • 2021-01-13 03:04

    Html.TextBox has more parameters than one..first parameter is the name or id of input element, and the second one is the value...

    so write your textbox helper like this:

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

    cheers

    0 讨论(0)
  • 2021-01-13 03:07

    Html.TextBox() uses internally ViewData.Eval() method which first attempts to retrieve a value from the dictionary ViewData.ModelState and next to retrieve the value from a property of the ViewData.Model. This is done to allow restoring entered values after invalid form submit.

    Removing Count value from ViewData.ModelState dictionary helps:

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

    Another solution is to make two different controller methods for GET and POST operations:

    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);
    }
    

    Counter object could also be passed via TempData dictionary.

    You may also be interested in the article Repopulate Form Fields with ViewData.Eval() by Stephen Walther.

    0 讨论(0)
  • 2021-01-13 03:10

    That's not the issue here. Specifying

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

    is equivalent to specifying

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

    which will pull the matching value (named "Count") from the ModelStateDictionary.

    But even so, explicitly passing in

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

    results in the same behavior described by alex2k8.

    0 讨论(0)
提交回复
热议问题