Dea*_*ean 0 html-helper model asp.net-mvc-partialview asp.net-mvc-5
我的 MVC 应用程序中发生了一件非常奇怪的事情。我正在将部分视图渲染到引导弹出窗口中。控制器操作如下所示:
[HttpGet]
public ActionResult GetModalForm(int id)
{
var vm = CreateViewModel(id)
return PartialView("MyPartialView", vm);
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,视图模型中有两个字段:
public class MyViewModel
{
public int id { get; set; }
public int MemberId {get ; set;}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,当我在控制器操作中放置断点时,id 和 MemberId 字段设置正确。
现在事情变得古怪了,我的部分视图中有以下几行(用于测试问题):
@using ()
{
@Html.TextBox("id", Model.id)
@Html.TextBox("something", Model.id)
<input type='submit'/>
}
Run Code Online (Sandbox Code Playgroud)
渲染时,第一行给出一个文本框,其值等于 MemberId 字段,第二行给出的值等于 id 字段。我真的不明白这两行如何为同一字段提供不同的值。奇怪的是为什么第二行读取的是 MemberId 字段?
有没有人以前见过类似的事情,或者有任何想法可能导致它?我已经无计可施了。
预先感谢您的任何帮助。
更新:
为了帮助进一步解释发生的情况:如果我的视图模型属性是 id=x 和 MemberId=y。然后是以下行:
@Html.HiddenFor(m => m.id)
Run Code Online (Sandbox Code Playgroud)
将渲染为:
<input type="hidden" id="id" name="id" value="y"/>
Run Code Online (Sandbox Code Playgroud)
您的操作接受一个参数id。这意味着 中有一个值,Request["id"]并且该值将进入ModelState. 中的ModelState内容优先于您的Model. 因此,绑定到“id”的文本框将从 中获取值Request["id"]。
两件事情:
使用*For助手总是更好,因为它们允许您以强类型方式绑定到模型属性。
@Html.TextBoxFor(m => m.id)
Run Code Online (Sandbox Code Playgroud)无论您拥有什么操作参数,都不应该在视图模型上具有等效命名的属性,除非它们实际上应该是相同的东西并且具有相同的值。换句话说,如果参数id实际上对应于MemberId,那么您的模型上应该没有id属性,或者您应该将操作参数重命名为memberId。
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |