2015-06-10 3 views
0

Я пытаюсь использовать сильно типизированную ViewModel и обнаруживаю, что при замене класса Model на ViewModel изменения не отправляются правильно из шаблона Edit. В то время как просто использование класса Model в представлении, изменения происходят успешно. Мой класс модели - MaterialDefinition, а класс ViewModel - MaterialDefinitionViewModel, как показано ниже. Я правильно обновил шаблон редактирования, чтобы ссылаться на ViewModel, но, как я сказал, редактирование просто не работает. Я использую VS2013 и MVC4. Любые идеи, кто-то?ViewModel не обновляет модель правильно при отправке

Первый класс ViewModel ...

public class MaterialDefinitionViewModel 
{ 
    // Properties 
    public MaterialDefinition Definition { get; private set; } 

    // Constructor 
    public MaterialDefinitionViewModel(MaterialDefinition def) 
    { 
     Definition = def; 
    } 
} 

и теперь некоторый код из представления ...

<div class="editor-field"> 
    @Html.EditorFor(model => model.Definition.mdDescription) 
    @Html.ValidationMessageFor(model => model.Definition.mdDescription) 
</div> 

<p> 
    <input type="submit" value="Save" /> 
</p> 

ответ

1

Наконец обнаружил ответ на это после долгих поисков ...

[HttpPost] 
    public ActionResult Edit(string id, FormCollection collection) 
    { 
     MaterialDefinition def = repository.GetMaterialDefinition(id); 
     UpdateModel(def, "Definition"); 
     //UpdateModel(def); 
     repository.Save(); 
     return RedirectToAction("Details", new { id = def.mdID }); 
    } 

Оказывается, не существует очевидной перегрузки для метода UpdateModel, который использует префикс свойства «Имя». Это имя исходного класса инкапсулированной модели внутри ViewModel. Исправленный фрагмент кода из метода «Редактировать сообщение» контроллера показан выше.

+0

Почему вы не просто отправляете назад свою модель просмотра, а затем сопоставляете свойства модели вида с вашей моделью данных? –

Смежные вопросы