Я начал создавать свой контроллер для родительской модели, указанной ниже. Я использую модели просмотра для всех своих взглядов, но прежде чем я перешел к добавлению логики для действия Create (Post), я просто нажал submit для черта, думая, что моя модель просмотра не будет сопоставляться с моей моделью.MVC4 Автоматически отображает мою модель представления?
К моему удивлению, это действительно сработало. Я использую AutoMapper и настроил все сопоставления для дочерних моделей на соответствующие модели, но не на родительскую модель (как отсутствие в результатах сообщения). Что происходит здесь, когда MVC разрешает такую магию?
Модель:
public partial class ParentModel
{
public int Id { get; set; }
public int Child1Id { get; set; }
public int Child2Id { get; set; }
public int Child3Id { get; set; }
public int Child4Id { get; set; }
//other data
public virtual Child1 Child1 { get; set; }
public virtual Child2 Child2 { get; set; }
public virtual Child3 Child3 { get; set; }
public virtual Child4 Child4 { get; set; }
}
вид Модель:
public class ParentCreateViewModel
{
//other data
public Child1ViewModel Child1 { get; set; }
public Child2ViewModel Child2 { get; set; }
public Child3ViewModel Child3 { get; set; }
public Child4ViewModel Child4 { get; set; }
}
View (Create.cshtml):
@model Project.ViewModels.ParentCreateViewModel
@*EditorTemplates and such*@
Controller (Получить):
public ActionResult Create()
{
//some list logic
return View();
}
Controller (Post - я еще не изменил его на ParentCreateViewModel или AutoMapped его обратно ParentModel):
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ParentModel parentModel)
{
if (ModelState.IsValid)
{
db.ParentModels.Add(parentModel);
db.SaveChanges();
return RedirectToAction("Index");
}
//some list logic
return View(parentModel);
}
Моя материнская модель и все дочерние модели правильно сохраняется в базе данных. MVC делает что-то за привязкой сцены? Разве не следует ожидать ParentCreateViewModel?
Если представление возвращается, ParentCreateViewModel не должен обрабатывать метод Create Post, когда он получает это, в отличие от ParentModel? Или происходит отображение, когда представление передается в сообщение, а не на db.ParentModels.Add (parentModel)? – Xaxum
+1 Чтобы добавить к этому ответу, ваше представление (которое здесь не показано) будет состоять из формы, которая HTTP POST возвращает поля на веб-сервер. Порекомендуйте ознакомиться с запросом с помощью [fiddler] (http://fiddler2.com/), чтобы получить представление о том, что отправляется обратно. Данные запроса HTTP будут проверяться связующим веществом модели MVC по умолчанию, которое попытается создать экземпляр типа модели, определенный в методе действий, заполняя сопоставимые свойства с помощью значений запроса. – SteveChapman
@chappoo спасибо за разъяснение, где происходит отображение. – Xaxum