Asp.net mvc Html.TextBox是否使用Request.Params而不是Model?
我有一个简单的测试应用程序: 型号:Asp.net mvc Html.TextBox是否使用Request.Params而不是Model?,asp.net-mvc,html-helper,Asp.net Mvc,Html Helper,我有一个简单的测试应用程序: 型号: public class Counter { public int Count { get; set; } public Counter() { Count = 4; } } 控制器: public class TestController : Controller { public ActionResult Increment(Counter counter) { coun
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);
}
}
视图:
单击“提交”可获得以下值:
5、6、7、8
对于Html.TextBox,我期望有相同的行为
<form action="/test/increment" method="post">
<%= Html.TextBox("Count") %>
<input type="submit" value="Submit" />
</form>
但事实上
五,五,五,五
Html.TextBox似乎使用Request.Params而不是Model?Html.TextBox有多个参数。第一个参数是输入元素的名称或id,第二个参数是值 因此,请按照以下方式编写文本框帮助器:
<%= Html.TextBox("Count",Model.Count) %>
干杯这不是问题所在。指定
<%= Html.TextBox("Count") %>
<%= Html.TextBox("Count", null) %>
等同于指定
<%= Html.TextBox("Count") %>
<%= Html.TextBox("Count", null) %>
它将从ModelStateDictionary中提取匹配值(名为“Count”)
但即便如此,明确地传递
<%= Html.TextBox("Count", Model.Count) %>
结果与alex2k8描述的行为相同。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);
}
计数器对象也可以通过tempdatadictionary传递
您可能还对Stephen Walther的文章感兴趣。那么为什么显式指定Model.Count不起作用?因为最初Html.TextBox()从ModelState字典中获取值。