考虑以下Razor片段:
<div class="form-group">
@Html.LabelFor(model => model.Model, new {@class="col-lg-3 control-label" })
<div class="col-lg-9">
@Html.TextBoxFor(model => model.Model, new {@readonly="readonly",
tabindex="3",
@class="form-control focus-effect",
placeholder=Model.Model,
title=Model.Model })
</div>
</div>
这个特定片段的有趣之处在于,一旦我删除它,我的模型就会发布回来。但是如果我添加它,模型将返回null。我有大约20个其他属性使用完全相同的片段显示(当然,栏目具有唯一的名称和标题和占位符的值)。
e.g。
<div class="form-group">
@Html.LabelFor(model => model.DMSStockNo, new {@class="col-lg-3 control-label" })
<div class="col-lg-9">
@Html.TextBoxFor(model => model.DMSStockNo, new {@readonly="readonly",
tabindex="5",
@class="form-control focus-effect",
placeholder=Model.DMSStockNo,
title=Model.DMSStockNo })
</div>
</div>
有问题的模型:
public class VehicleDetailsModel
{
[DisplayName("Stock Number")]
public string DMSStockNo { get; set; }
[DisplayName("Vehicle Model")]
public string Model { get; set; }
//snip
}
是不是因为我愚蠢地选择了一个属性“Model”?正如我所说,如果我从编辑表单中省略Model.Model并回发,那么所有els都会被发布,我会将一个VehicleDetailsModel对象传递给控制器方法,但是如果我包含它,我的VehicleDetailsModel本身就是null。
答案 0 :(得分:2)
我会将此作为完整性和未来访问者的答案...
在这种情况下,似乎确实存在与“模型”一词的名称冲突。我不知道MVC中的模型绑定器是如何实现的细节,但它试图从基本上非常少的信息推断出很多信息......即它在POST(或GET)中接收的键/值对等)请求。也许假设是为了实现“模型”一词将用于特定目的。 可能记录在某处,但我没有方便的链接。
无论如何,在这种情况下,将属性更改为类似VehicleModel
的内容应该可以解决问题。