gpt4 book ai didi

asp.net-mvc - Html.TextBox 是否使用 Request.Params 而不是 Model?

转载 作者:行者123 更新时间:2023-12-01 19:25:51 27 4
gpt4 key购买 nike

我有一个简单的测试应用程序:

型号:

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

public Counter()
{
Count = 4;
}
}

Controller :

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 而不是 Model?

最佳答案

Html.TextBox() 在内部使用 ViewData.Eval() 方法,该方法首先尝试从字典 ViewData.ModelState 中检索值,然后从 ViewData.Model 的属性中检索值。这样做是为了允许在提交无效表单后恢复输入的值。

从 ViewData.ModelState 字典中删除 Count 值有助于:

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

另一个解决方案是为 GET 和 POST 操作创建两种不同的 Controller 方法:

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 字典传递。

您可能还对文章 Repopulate Form Fields with ViewData.Eval() 感兴趣作者:史蒂芬·沃尔特。

关于asp.net-mvc - Html.TextBox 是否使用 Request.Params 而不是 Model?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/953330/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com