Сценарий
Маршрут: / template / customize / 10 Где: 10 = ID шаблона ()
В контроллере модель создается на основе шаблона, так чтоМодель представления на самом деле является объектом 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 ) );
}
Решение
Изменена подпись действия на:
public ActionResult Customize( int TemplateId ){ ... }
Изменена ссылка на действие как таковое:
@Html.ActionLink( "customize", "customize", new { TemplateId = template.Id } )
Я в конечном итогес URL-адресом, который выглядит как
/template/customize?TemplateId=10
Это уродливее, но я получаю, чтобы держать мой взгляд в чистоте с моделью. Так что это победа для меня.