gpt4 book ai didi

asp.net-mvc - Html.HiddenFor 偶尔无法设置模型信息

转载 作者:行者123 更新时间:2023-12-02 17:58:23 24 4
gpt4 key购买 nike

我们在 MVC3 中遇到 Html.HiddenFor 的问题偶尔无法正确绑定(bind)。我们根本无法重现它,但我们在日志记录中看到了空引用,这让我们彻底发疯。

我们有以下模型和 Controller 结构:

public class DummyController
{
[HttpGet]
public ActionResult ReturnAPage(int NumericID)
{
//NumericID should never be 0 or negative, but let's check to make sure
if (NumericID < 1)
{
return RedirectToAction("TracyJordanStabbingRobot");
}
return View("DummyView", new DummyViewModel(NumericID));
}

[HttpPost]
public ActionResult TakePageSubmission(DummyViewModel model)
{
//AnObject relies on having a non-zero ID
ComplexObject AnObject = new ComplexObject(model.NumericID);
AnObject.UseMe();
}
}

public class DummyViewModel
{

public DummyViewModel() {}
public DummyViewModel(int ID)
{
NumericID = ID;
}

public int NumericID { get; set; }
}

...以及以下 View 结构:

DummyView.cshtml

@model DummyViewModel
<html>
<head></head>
<body>
<p>THIS IS A VIEW!</p>
<form id="DummyViewForm" action="/RouteTo/TakePageSubmission" method="post">
@Html.Partial("_PartialDummyView", Model)
<input type="submit" value="Submit This!" />
</form>
</body>
</html>

_PartialDummyView.cshtml

@model DummyViewModel
<p>Heard you like views...</p>
@Html.HiddenFor(model => model.NumericID)

考虑到我们在初始 Controller 操作中检查小于零的值,因此 @Html.HiddenFor(model => model.NumericID) 永远不应该有小于零的值- 大于零的值。

话虽这么说,当我们在 TakePageSubmission 操作中使用 AnObject 时,我们会收到空引用错误。

当我们深入记录 model.NumericID 值时,我们发现它为零,考虑到 DummyView 只能是,这应该不可能使用非零值访问。

我们有点困惑,因为我们无法可靠地重现该问题,所以我们知道可能是什么原因造成的。有人遇到过类似的事情吗?

编辑:我们正在对表单帖子进行 ModelState 验证,但我们不会检查 NumericID 是否为 0。当我们检查时,模型是无效的,这只是证明HiddenFor 设置不正确。此外,页面的路由实际上包括 NumericID,因此,例如,我们已经看到这种情况发生在:

http://our.site.com/RouteToReturnAPage/1736/

...如果明确设置了操作参数,则模型构建正确,但由于某种未知原因,HiddenFor NumericID 值为 0。这确实令人困惑。

最佳答案

您的默认 0 值绑定(bind)是从 MVC View'ing 到发布后的同一页面,认为由于发布期间的错误而重新加载相同的 View 。正确的绑定(bind)将发生在对不同操作调用的加载/操作调用上。

有一种破解方法,可以在重新加载 View 之前使用 ModelState.Clear();

此外,根本不使用帮助程序来创建隐藏字段,例如:

<input type="hidden" value="@Model.NumericID" id="NumericID" name="NumericID" />

引用: http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx

关于asp.net-mvc - Html.HiddenFor 偶尔无法设置模型信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15573531/

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