ASP.NET MVC 3 Model Id using Route Id value

久未见 提交于 2019-11-29 14:33:34

I think this is because when you use something like @Html.HiddenFor( m => m.Id ) the html helpers look in various places to populate the input's value, and the values in the route is one of those places.

So you could either change your route so that it's something like template/customize/{TemplateId} and then have your action method reflect this, e.g. public ActionResult Customize(int templateId).

OR you could change your viewmodel (or create a custom view model) that has a CustomizationId property rather than just Id.

And no, it's not a bug... it's more of a feature that can have unforeseen consequences. But once you're aware of it, it works like a treat.

You can always choose not to use the HTML Helper in this case and use plain HTML instead:

<input name="Id" id="Id" type="hidden" value="@Model.Id"/>

To prevent route values from overriding the model's corresponding properties, call ModelState.Clear() in your controller action. Be careful to call this method after using/reading the model state.

public ActionResult Customize( int id )
{
    var template = Persistence.Data.RetrieveObject<Template>( id );
    var model = new Customization();

    ViewBag.Template = template;

    this.ViewData.ModelState.Clear(); // add that after you consume the ModelState
    return ( View( model ) );
}

On my side, the hidden input gets the model's value instead of the route value.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!