ASP.net MVC - привязка значения формы к другому имени - PullRequest
0 голосов
/ 17 октября 2011

У меня есть представление, в котором можно как создавать, так и редактировать элемент, который я разделил на частичные представления:

MainEditView.cshtml
_CreateChildDialog.cshtml
_EditChildDialog.cshtml

У меня есть отдельные модели представления для элементов Create и Child:

public class CreateChildViewModel
{
    public string ItemText { get; set; }
}


public class EditChildViewModel 
{
    public string ItemText { get; set; }
}

Поскольку частичные представления для диалоговых окон «Редактировать» и «Создать» будут отображаться на одной странице, у меня будет конфликт для идентификаторов и имен форм ..., поскольку они оба называются ItemText.

Можно ли настроить привязку этих элементов без написания привязки пользовательской модели?

Я хотел бы сделать что-то вроде:

public class EditChildViewModel
{
    [BindFrom("EditItemText")]
    public string ItemText { get; set; }
}

Или это просто имеет больше смысла дляпереименуйте свойства ViewModel в:

public class EditChildViewModel 
{
    public string EditItemText { get; set; }
}

public class CreateChildViewModel
{
    public string CreateItemText { get; set; }
}

РЕДАКТИРОВАТЬ Основываясь на разговоре с Дарином, я хочу сделать это немного более понятным.

Мой родитель имеет действие Редактировать.Когда вы редактируете Parent, вы никогда не создадите новый дочерний элемент или не отредактируете дочерний элемент при вызове действия ParentController.Edit.

У меня есть отдельный контроллер для дочернего объекта, который имеет метод Create и Edit:

public class ChildController 
{
    public ActionResult Edit() {}
    public ActionResult Create() {}
}

Я использую вызовы jQuery для асинхронной публикации на этом контроллере при редактировании или создании дочернего элемента.В основном я использую диалог jquery для создания / редактирования дочернего элемента, который будет сразу же сохранен, когда я нажму Ok в диалоговом окне.Это может произойти даже до нажатия кнопки «Сохранить» для действия «Изменить родительское имя».

1 Ответ

3 голосов
/ 17 октября 2011

Я бы использовал редактор шаблонов.Обычно вы упаковываете эти две модели вида в модель основного вида, которая будет использоваться основным видом:

public class MyViewModel
{
    public CreateChildViewModel Create { get; set; }
    public EditChildViewModel Edit { get; set; }
}

, а затем:

@model MyViewModel
@Html.EditorFor(x => x.Create)
@Html.EditorFor(x => x.Edit)

, и я заменяю эти две частиих соответствующими шаблонами редактора (~/Views/Shared/EditorTemplates/CreateChildViewModel.cshtml и ~/Views/Shared/EditorTemplates/EditChildViewModel.cshtml).Шаблоны редактора будут генерировать собственные имена и идентификаторы соответствующих элементов ввода.

Лично я предпочитаю шаблоны редактора / отображения вместо частичных, поскольку они обрабатывают лучшее именование элементов ввода.

...