Html 帮手在给出特定名称时给出错误的值
Html Helpers giving wrong value when given a certain name
我的 MVC 应用程序中发生了一件非常奇怪的事情。我正在将部分视图渲染到 bootstrap 弹出窗口中。控制器操作如下所示:
[HttpGet]
public ActionResult GetModalForm(int id)
{
var vm = CreateViewModel(id)
return PartialView("MyPartialView", vm);
}
这似乎工作正常,视图模型中有两个字段:
public class MyViewModel
{
public int id { get; set; }
public int MemberId {get ; set;}
}
到目前为止一切顺利,当我在 Controller 操作中放置一个断点时,id 和 MemberId 字段设置正确。
现在事情变得古怪了,我的局部视图中有以下几行(用于测试问题):
@using ()
{
@Html.TextBox("id", Model.id)
@Html.TextBox("something", Model.id)
<input type='submit'/>
}
渲染时,第一行给我一个文本框,其值等于 MemberId 字段,第二行给我一个值等于 id 字段。我真的不明白这两行如何为同一领域提供不同的价值。奇怪的是为什么第二行读的是MemberId字段?
有没有人以前见过这样的事情,或者知道是什么原因造成的?我已经无计可施了。
在此先感谢您的帮助。
更新:
为了进一步解释正在发生的事情:如果我的视图模型属性是 id=x 和 MemberId=y。然后是下面一行:
@Html.HiddenFor(m => m.id)
将呈现为:
<input type="hidden" id="id" name="id" value="y"/>
您的操作接受参数 id
。这意味着 Request["id"]
中有一个值,该值将进入 ModelState
。 ModelState
中的任何内容都优先于 Model
中设置的值。因此,绑定到 "id" 的文本框将从 Request["id"]
.
中获取值
两件事:
使用 *For
助手总是更好,因为它们允许您以强类型方式绑定到模型属性。
@Html.TextBoxFor(m => m.id)
无论您有什么操作参数,都应该不在您的视图模型上具有等效命名的属性,除非它们实际上应该是相同的东西并且具有相同的值。换句话说,如果参数 id
实际上对应于 MemberId
,那么你应该在你的模型上没有 id
属性,或者你应该将你的动作参数重命名为 memberId
.
我的 MVC 应用程序中发生了一件非常奇怪的事情。我正在将部分视图渲染到 bootstrap 弹出窗口中。控制器操作如下所示:
[HttpGet]
public ActionResult GetModalForm(int id)
{
var vm = CreateViewModel(id)
return PartialView("MyPartialView", vm);
}
这似乎工作正常,视图模型中有两个字段:
public class MyViewModel
{
public int id { get; set; }
public int MemberId {get ; set;}
}
到目前为止一切顺利,当我在 Controller 操作中放置一个断点时,id 和 MemberId 字段设置正确。
现在事情变得古怪了,我的局部视图中有以下几行(用于测试问题):
@using ()
{
@Html.TextBox("id", Model.id)
@Html.TextBox("something", Model.id)
<input type='submit'/>
}
渲染时,第一行给我一个文本框,其值等于 MemberId 字段,第二行给我一个值等于 id 字段。我真的不明白这两行如何为同一领域提供不同的价值。奇怪的是为什么第二行读的是MemberId字段?
有没有人以前见过这样的事情,或者知道是什么原因造成的?我已经无计可施了。
在此先感谢您的帮助。
更新:
为了进一步解释正在发生的事情:如果我的视图模型属性是 id=x 和 MemberId=y。然后是下面一行:
@Html.HiddenFor(m => m.id)
将呈现为:
<input type="hidden" id="id" name="id" value="y"/>
您的操作接受参数 id
。这意味着 Request["id"]
中有一个值,该值将进入 ModelState
。 ModelState
中的任何内容都优先于 Model
中设置的值。因此,绑定到 "id" 的文本框将从 Request["id"]
.
两件事:
使用
*For
助手总是更好,因为它们允许您以强类型方式绑定到模型属性。@Html.TextBoxFor(m => m.id)
无论您有什么操作参数,都应该不在您的视图模型上具有等效命名的属性,除非它们实际上应该是相同的东西并且具有相同的值。换句话说,如果参数
id
实际上对应于MemberId
,那么你应该在你的模型上没有id
属性,或者你应该将你的动作参数重命名为memberId
.