Razor View HiddenFor()绑定错误

时间:2016-08-04 19:49:06

标签: c# asp.net-mvc razor

我在ASP.NET mvc中为表单创建强类型的局部视图,其中我想使用隐藏的输入来传达特定视图模型的Id属性。呈现视图的控制器接受id参数,在我的RouteConfig.cs中注册为选项url参数,这意味着不相关。

如果控制器的用户名为"Tim"作为路由参数,并且传递给部分视图的模型的Id"e1ac2e44-1e09-4bb4-a7f0-85e1eedf3448",则会发生以下情况:

@Html.DisplayFor(m => m.Id)正确显示我想要的e1ac2e44-1e09-4bb4-a7f0-85e1eedf3448

@Html.HiddenFor(m => m.Id)错误地创建了值为"Tim"的隐藏输入:

<input id="Id" name="Id" type="hidden" value="Tim">

同样的情况发生在:

@Html.HiddenFor(m => Model.Id)
@Html.HiddenFor(m => m.Id, new { value = Model.Id })
@Html.HiddenFor(m => m.Id, new { value = "Obvious eye-catching string" })
@Html.Hidden("Id", Model.Id)
@Html.Hidden("Id", "Obvious string")

但是,@Html.Hidden("NotId", Model.Id)使用正确的值创建隐藏输入,但不会使用与视图模型中的预期属性匹配的名称:

<input id="NotId" name="NotId" type="hidden" value="e1ac2e44-1e09-4bb4-a7f0-85e1eedf3448">

随着进一步的活动,我发现TextBoxForTextAreaForEditorFor的绑定方式与HiddenFor相同,并显示{{ 1}},而不是字母数字用户ID。这给我留下了两个基本问题:

  • 为什么"Tim"与其他Razor助手绑定不同?
  • 除了更改名称之外,使用我的视图模型的属性@Html.DisplayFor而不是路由参数Id的正确方法/最简单的解决方法是什么?

1 个答案:

答案 0 :(得分:0)

在此详细发表评论..

HiddenFor和EditorFor是(扩展)方法,用于指示需要将值与表单一起传回。因此,有意义的是,他们会在该RouteValue上寻找用户的特定覆盖(在这里你写了Id)。 DisplayFor是用于显示值的方法,而不会在提交表单时将其传回。在这里,因为你不想传回Model.Id的当前值,你应该使用@Html.DisplayFor(m=> m.Id,new {Hidden})