情景
路线:/模板/定制凡/ 10 :10 =模板()ASP.NET MVC 3机型ID
在控制器的ID模型被创建基于该模板使得View的模型实际上是一个Customization()对象,因为它是新的,它实际上具有Id 0。
在我渲染@ Html.HiddenFor视图(M => m.Id),并将所得该隐藏的输入的值是,虽然它应该是因为m是类型定制的。我之前用MVC 2遇到过这个问题,并且没有使用helper方法来解决它。
问题
有注释或东西我 可以添加到HTML辅助方法 实际呈现正确的价值?
这是一个bug(MVC似乎是 渲染m.Id作为路由值 不管什么实际的模型 在控制器设置的)?
澄清附加代码
查看
@model Project.Core.Domain.Customization
@using(Html.BeginForm("save", "customization"))
{
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.Template.Id)
<button type="submit" id="save" name="save">Save</button>
}
控制器
public ActionResult Customize(int id)
{
var template = Persistence.Data.RetrieveObject<Template>(id);
var model = new Customization();
ViewBag.Template = template;
return (View(model));
}
解决方案
行动更改签名:
public ActionResult Customize(int TemplateId){ ... }
更改链接到行动,例如:
@Html.ActionLink("customize", "customize", new { TemplateId = template.Id })
我结束了一个URL,看起来像
/template/customize?TemplateId=10
这是丑陋的,但我可以保持我的观点清洁与模型。所以这是一个胜利 我。
请问你能展示一些代码吗?控制器和视图会很有帮助。这听起来像你的视图可能会继承错误的模型类型。 –
增加了一些代码。该视图为模型使用了正确的类型。正如查尔诺认为这可能不是一个错误,而是一个后果。问题是这个结果打破了自动化。 –