2011-09-09 26 views
4

我花了一个小时试图弄清楚为什么我隐藏字段中的值与我期望的值不同。作为最后的努力,我将它切换到一个隐藏的领域,它开始渲染,我期待。为什么会发生?input type =“hidden”vs htmlhelper奇怪的问题

某些情况下,使用htmlhelper的ID所使用的ID与查询字符串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

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

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

它不使用不使用HtmlHelper的查询字符串“ID”,因为它没有通过ViewContext查找该名称;它只是放在模型的任何价值。 HtmlHelpers通常会查看ViewContext,并根据属性名称找出要使用的值,而不是确切来自何处。

如果你想使用的HtmlHelper,试试这个,看看它做什么:

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