【问题标题】:Why mvc Html.HiddenFor does not render my field?为什么 mvc Html.HiddenFor 不呈现我的字段?
【发布时间】:2010-08-31 04:44:54
【问题描述】:

我正在尝试做这个简单的事情

<%= Html.HiddenFor(model => model.Id)%>

型号是

[HiddenInput(DisplayValue=true)]
public int Id { get; set; }

但我总是得到这个渲染

<input type="hidden" value="0" name="UserInfo.Id" id="UserInfo_Id">

我检查过,id 不是 0.. ?!

这里需要一些解释...

编辑

问题似乎是下面提到的帖子。 这是有效的

<input type="hidden" value="<%= Html.AttributeEncode(Model.Id) %>" id="<%= Html.IdFor(model=>model.Id)%>" name="<%= Html.NameFor(model=>model.Id)%>" />

感谢马纳夫

【问题讨论】:

  • 将同一个字段放入普通的textboxfor 会发生什么?

标签: asp.net-mvc-2


【解决方案1】:

我不确定您是否属于这种情况,但Html.HiddenFor()“如果在发布期间更改了值,则在发布后不输出正确的值。”这不是一个错误,它是这样设计的。

快速修复:

不要使用助手,试试这个:

<input type="hidden" value="<%= Html.AttributeEncode(model.Id) %>" id="Id" name="Id" />

一直为我工作:)

【讨论】:

  • 实际上我们应该这样做来处理复杂的模型
  • 显然这不是错误。不幸的是,这是我一直被抓住的东西 :( 另一种选择是有一个 ModelState.Clear(); 调用你的控制器动作。
  • 如果不是错误,有人知道为什么要这样设计吗?
  • 好的,链接永远消失了 :( 。顺便说一句,如果您不想清除模型状态,删除有问题的密钥对我有用:ModelState.Remove("HiddenKey")
【解决方案2】:

添加到 Manaf 的正确答案 - 您正确地注意到问题发生在处理帖子的控制器操作中。当我将模型显式传递给视图时,我在处理 get 的控制器操作中遇到了同样的问题:

[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
    searchForm.MyId = SomeValueFromSession;
    return View("SearchForSomething", searchForm);
}

在视图中,为 MyId 呈现隐藏输入的这条线始终呈现为“0”:

@Html.HiddenFor(m => m.MyId);

根据 Darren Oster 的建议,我更改为以下内容并解决了问题:

[HttpGet]
ActionResult SearchForSomething(SearchForm searchForm)
{
    searchForm.MyId = SomeValueFromSession;
    ModelState.Clear();
    return View("SearchForSomething", searchForm);
}

【讨论】:

  • 普通的 标签和 ModelState.Clear() 都对我有用,但我发现使用后者(带有我的追随者的正确评论)比混合使用更清晰 @Html.xxx 和在我的视图中输入标签...
【解决方案3】:

我的评论被放到了最后一个位置(即使我找不到),所以:

如果您不想清除模型状态,正如 Darren Oster 建议的那样,删除有问题的密钥对我有用:ModelState.Remove("HiddenKey")

【讨论】:

    【解决方案4】:

    @Html.HiddenFor 也遇到了这个问题。

    @Html.Hidden("Id", Model.Id) 也给出了值 0,但是一个外键字段,例如 @Html.Hidden("Model_Category_ModelId", Model.Category.ModelId) 确实有效,而它 @ Html.HiddenFor(m => m.Category.ModelId) 没有。

    我的解决方案是重定向到 get 操作,如 ASP NET MVC Post Redirect Get Pattern 中所述。

    【讨论】:

      猜你喜欢
      • 2020-05-12
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 2013-01-19
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      相关资源
      最近更新 更多