我有一个简单的表格来修改复杂模型的一部分。我当然可以削减模型,但我想解决复杂的情况,因为无论如何我们最终都会处理整个模型。
我希望渲染的输入有一个简单的 ID 和名称,但模型名称似乎是不可移动的。
@Html.EditorFor(model => model.CallInfo.Phone1,
new { @id = "Phone1", @name = "Phone1"})
应该输出这个
<input type="text" value="" name="Phone1" id="Phone1" class="text-box single-line">
相反,它输出这个,CallInfo 到处都是前缀。
<input type="text" value="" name="CallInfo.Phone1" id="CallInfo_Phone1" class="text-box single-line">
如果这不能被打败,那么有没有办法让CallInfo.Phone1
参数自动解析为动作方法的参数?因为这是 C# 中的无效语法。
public ActionResult UpdatePhoneNumber(Int32 profileId, String CallInfo.Phone1)
再次,我意识到我可以从请求中手动检索它,就像这样
HttpRequest.Current.Params["CallInfo.Phone1"]
但看起来 C# MVC4 约定在这里应该很好地结合在一起,使这些自动魔术小部件中的一个做正确的事情。
更新:按照 Dmitri 的回答,我保留了视图标记的name="CallInfo.Phone1"
原样,生成了属性并将操作签名修改为:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdatePhoneNumber(Int32 profileId,
[Bind(Prefix = "CallInfo")] string phone1)
{
// Save it
}
在调试器中,phone1
为 null 并且不会保存到数据库中。从萤火虫捕获的帖子正文是这样说的:
Parameters application/x-www-form-urlencoded
CallInfo.Phone1 8121234567
我也尝试过p
将Phone1
参数名称中的大写无效。