【发布时间】:2012-01-31 20:34:44
【问题描述】:
我正在使用 MS MVC 3 构建一个 Web 应用程序并遇到了一个问题,这可能是由于我对模型绑定的理解存在漏洞。
首先,我有一个相当标准的模型(为简洁起见省略了无关的内容,更改了名称以保护无辜对象的隐私):
public class ModelBase
{
public int Id { get; set; }
}
public class Order : ModelBase
{
public List<Product> Products { get; set; }
}
public class Product : ModelBase
{
public int OrderId { get; set;}
}
为了显示和编辑这些,我有一个对 Order 类进行强类型化的视图,其中包含一个对 Product 类进行强类型化的部分视图。部分视图的顶部如下所示:
@model Product
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.OrderId)
//loads of actual editable properties
我像这样将部分插入到主视图中:
@Html.Partial("EditorTemplates/Product", Model.Products.First())
...当视图在浏览器中呈现时,“Id”隐藏输入包含订单的 ID,而不是我期望和需要的产品 ID :(
我错过了什么?可以在不改变模型和视图结构的情况下修复吗?
【问题讨论】:
-
看起来没问题,你怎么确定Id是订单? OrderId 显示是否正确?
-
OrderId 确实显示正确,并且与 Id 字段中显示的值相同。不过,我想我不确定它是否来自 Order 的值,因为该值也作为请求 url 的一部分存在(/Orders/Step2/10,其中 10 是 Order Id)。会不会是这个值覆盖了 Id 字段?
-
可以通过DB确认orderid和这条记录的id是否相同?
-
在我的特定测试用例中,订单 ID 为 10,产品 ID 为 3。我在这两个字段中都得到 10。没有 ID 为 10 的产品。
标签: asp.net-mvc model-view-controller inheritance properties partial