2017-01-28 2 views
0

У меня есть следующий Судо-кодкак сделать HttpPost ActionResult связывать только часть ViewModel

class viewModel 
{ 
    public ICollection<modelA> parentModel 
    public modelC formModel 
} 

class modelA 
{ 
    public int ID {get;set;} 
    public virtual Icollection<modelB> {get;set;} 
} 

class modelB 
{ 
    public int ID {get;set;} 
    public string SomeString {get;set;} 
    public virtual modelA ModelA {get;set;} 
} 

class modelC 
{ 
    public int ModelAID {get;set;} 
    public string SomeString {get;set;} 
} 

Зв модель представления содержит коллекцию As. Каждый A содержит коллекцию Bs и существует отдельная модель для отправки в виде формы: форма будет повторяться на странице, как только в каждом экземпляре A с A.ID, переданным в ModelAID в качестве скрытого поля. На странице допускается только одна публикация формы. Идентификатор полей формы - это formModel.ModelAID и .formModel.SomeString, поскольку они получены из не-родительского элемента viewModel.

Как заставить ActionResult связываться только с формойModel?

[HttpPost] 
Public ActionResult Input(formModel vm) 
{ 
    ... by default the view model being passed back is full VM, I only want the formModel so the post signature does not match 
} 

ответ

1

Вы можете попробовать что-то вроде

public ActionResult Input([Bind(Prefix = "formModel ")]modelC model) 
{ 

} 
+0

совершенен! именно то, что я искал. Для справки я также нашел это сообщение в блоге: [link] (http://code.lawrab.com/2012/05/using-bind-prefix-in-aspnet-mvc.html), в котором указывается, что если вы используете частичный рендеринг и передать часть viewModel в шаблон, тогда по умолчанию имя modelPart не заполняется в идентификаторы поля формы. Это нужно учитывать при рефакторинге кода –

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

  • Нет связанных вопросов^_^