2015-05-20 3 views
0

Не уверен, что заголовок достаточно ясный. У меня есть объекты продуктов и категорий в приложении MVC-EF. при добавлении нового продукта я выбираю категорию из выпадающего списка. Я хотел бы иметь возможность создать новую категорию, если она не существует в раскрывающемся списке на странице продукта/создания. возможно, с кнопкой «Добавить новую категорию» рядом с выпадающим списком.Создать объект из другого объекта в MVC

Например: если я хочу добавить книгу, принадлежащую отделу кулинарии (которого нет в списке), я хочу иметь возможность добавить кулинарный отдел в то же время, я добавляю книгу без собирается в отдел/Создать вид

enter image description here

+2

Вы еще что-нибудь пробовали?Если да, отправьте свой код с вашей попытки. – br4d

+0

Нет. Ваш вопрос непонятен. Что вы знаете, а что нет? –

ответ

1

Ну, есть три основных подхода:

  1. Ручка создания категории через модальное окно или аналогичные, что тянет в IFRAME. Это самый простой метод, так как создание категории полностью разделено собственными действиями и представлениями. Тем не менее, вам все равно потребуется JavaScript для обновления выбранных вариантов выбора, чтобы включить вновь созданный элемент после его сохранения. Это относительно легко. Вы просто выдаете запрос AJAX на какую-либо конечную точку, которая возвращает все доступные категории и использует это, чтобы перестроить список выбора после закрытия модальности.

  2. Используйте AJAX для создания категории. Это немного сложнее, чем # 1, но все же относительно прямолинейно. У вас просто есть форма с полями для новой категории, внедренной где-то на вашей странице. Вы также можете использовать AJAX для запроса формы HTML из действия, которое возвращает PartialViewResult. В любом случае, вы можете представить это пользователю через модаль или что угодно. Затем, когда они отправляются вместо обычного сообщения формы, вы просто отправляете запрос AJAX с данными сериализованной формы на какую-либо конечную точку, ответственную за ее фактическое сохранение. Как и # 1, вам потребуется дополнительный JavaScript, чтобы обновить список избранных соответственно после сохранения категории.

  3. Включите новую категорию с данными сообщения остальной формы продукта. Это самый сложный из трех вариантов, поскольку вам нужно проявлять особую осторожность несколькими способами. Вам понадобится отдельная коллекция на вашей модели просмотра, чтобы сохранить опубликованную категорию или категории, и вам необходимо вручную добавить эти новые категории в свой продукт, прежде чем сохранять их. Вам также потребуется синхронизировать его с категориями, связанными с помощью списка выбора.

Предоставление вам более конкретных сведений выходит за рамки StackOverflow. Какой бы из перечисленных выше трех методов вы ни выбрали, немного исследований приведет к тому, что вам будет достаточно статей/руководств, чтобы вы прокатились. Если у вас есть конкретные проблемы в процессе создания вашего решения, вы можете вернуться сюда, чтобы задать конкретные вопросы об этом.

+0

спасибо, у вас есть пример первого метода? – Mike

0

я имел аналогичное требование на проекте. Сделать что-то вроде этого:

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Затем заполнить выпадающий список со всеми вашими категориями, и вы можете сделать больше, как вы идете вперед.

На вашем продукте вы просто создаете виртуальную собственность категории для доступа к ней.

public class Product 
{ 
    public int Id { get; set; } 
    //Rest of your fields 
    public int CategoryId { get; set; } 

    public virtual Category Category { get; set; } 
} 

Выполнение этого позволит вам ленить загружать связанные объекты, если хотите.

+0

Разве это не сломалось бы, если бы падение категории было также отдельной таблицей, связанной внешним ключом? – Zman101

+0

Нет. Используя виртуальный и идентификатор категории, он прекрасно связывает его и является одной из ключевых особенностей EF. Я все время так делаю, так как это довольно распространенное требование. Редакция: Редактировать: Также стоит отметить, что до тех пор, пока вы использовали DropDown как имеющую значения идентификаторов, когда он был отправлен обратно, вы просто передаете это свойство CategoryId, и EF соответствующим образом свяжет его. Конечно, вы можете проверить, существует ли этот идентификатор;) – JonE

+0

@ Giltch100, это уже работает для меня. все категории находятся в раскрывающемся списке. Я хочу создать новую категорию при создании нового продукта, не выходя из образа продукта/создания. – Mike

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