Как связать - PullRequest
       46

Как связать

1 голос
/ 01 февраля 2012

Как связать поле input[type='text'] со свойством типа Subsidiary Когда пользователь регистрирует вечеринку, одним из полей является дочерняя компания, которая была вечеринкой

Вместо установки DropDown, выберите Выбратьили Радио Я ставлю поле input[type='text'], и когда пользователь начинает вводить имя дочерней компании, автозаполнение в jQueryUI показывает список дочерних компаний, отфильтрованных

Код

Для выполнения этих задач у меня есть:

ViewModel

public class PartyViewModel
{       
    [UIHint("SubsidiarySelect")]
    public Subsidiary Subsidiary { get; set; }
}

HTML

HTML, созданный EditorTemplates of SubsidiarySelect

<input id="Subsidiary_Title" name="Subsidiary.Title" type="text" value="">
<input id="Subsidiary" name="Subsidiary" type="hidden" value="00000000-0000-0000-0000-000000000000">

#Subsidiary_Title> используется для отображения выбранной дочерней компании
#Subsidiary> сохраняет выбранный код Guid дочерней компании

Контроллер

Мой контроль ничего особенного.Я хотел бы, чтобы свойство Subsidiary в моем PartyViewModel классе было бы заполнено.

[HttpPost]
public ActionResult Nova(PartyViewModel model)
{
    if (ModelState.IsValid)
    {
        //.....
    }
}

Вопросы

Я думал о создании SubsidiaryBinder: IModelBinder, чтобы при создании сообщенияЯ бы заполнил свойство Subsidiary значениями базы данных (как и ID)

  1. Если это решение, то как создать связыватель для запуска только в классе PartyViewModel
  2. Как автоматически получать значения из базы данных для класса свойств Subsidiary PartyViewModel при создании сообщения?

1 Ответ

0 голосов
/ 01 февраля 2012

Вы можете установить Binder для вашего PartyViewModel на Application_Start в global.asax

Sample

Ваш Binder

public class PartyViewModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        // ... do something,
        // for example, retieve values from database 
        return base.BindModel(controllerContext, bindingContext);
    }
}

Зарегистрироваться в global.asax

ModelBinders.Binders.Add(typeof(PartyViewModel), new PartyViewModelBinder());
...