脚本
路线:/ template / customize / 10
其中:10 =模板的ID()
路线:/ template / customize / 10
其中:10 =模板的ID()
在控制器中,模型是基于模板创建的,因此View的模型实际上是一个Customization()对象,实际上Id为0,因为它是新的.
在视图中我渲染@ Html.HiddenFor(m => m.Id)并且隐藏输入的结果值是10,尽管它应该是0,因为m是Customization类型.我之前使用MVC 2遇到过这种情况,并且通过不使用辅助方法解决了这个问题.
问题
>是否有注释或其他东西
可以添加到Html Helper方法
实际上渲染正确的值?
>这是一个错误(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 ) ); }
解
将Action的签名更改为:
public ActionResult Customize( int TemplateId ){ ... }
将链接更改为操作:
@Html.ActionLink( "customize","customize",new { TemplateId = template.Id } )
我最终得到了一个看起来像的网址
/template/customize?TemplateId=10
这很丑陋,但是我可以用模型来保持我的观点清洁.所以这对我来说是一场胜利.