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

五迷三道 提交于 2019-12-01 05:34: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.

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.

Marko

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!