输入类型=“隐藏”vs htmlhelper奇怪的问题

时间:2011-09-09 16:08:47

标签: asp.net-mvc

我花了一个小时试图弄清楚为什么隐藏字段中的值与我期望的值不同。作为最后的努力,我把它切换到一个隐藏的领域,它开始渲染为我期待的那个。为什么会这样?

某些上下文是使用htmlhelper的ID正在使用的ID与querystring ID参数中的ID相同。

 // renders 123
  @using (Html.BeginForm()){
         <input type="hidden" name="id" value="@Model.ID" />
  }

vs

// renders 456
@using (Html.BeginForm()){
         @Html.Hidden("id", Model.ID)
}

1 个答案:

答案 0 :(得分:1)

我相信这是MVC命名约定的一部分。这发生在我身上,因为我的一个模型属性是“标题”,它与ViewBag.Title冲突。它开始显示ViewBag.Title而不是实际模型的标题。

我相信只有在HtmlHelper中明确声明“Model.ID”时才会发生这种情况。它查看属性名称“ID”,然后查看ViewContext并查找查询字符串“ID”并使用它。

对于不使用HtmlHelper的查询字符串,它不使用查询字符串“ID”,因为它不会通过ViewContext查找该名称;它只是放置模型中的任何值。 HtmlHelpers通常会查看ViewContext,并根据属性名称确定要使用的值,而不是它的确切来源。

如果您想使用HtmlHelper,请尝试此操作并查看其功能:

@Html.HiddenFor(model => model.ID)