MVC DropDown список с кодом первой модели - PullRequest
1 голос
/ 08 мая 2011

У меня есть пара базовых моделей, одна для продуктов и одна для категорий. Как я могу связать эти два в модели, чтобы при добавлении нового продукта я мог выбрать категорию, к которой принадлежит продукт, из DropDownList?

Я использую ASP.NET MVC 3 - с обновлением инструментов и синтаксисом Razor с разметкой HTML 5.

Я пытался заставить это работать безуспешно, может кто-нибудь, пожалуйста, укажите мне правильное направление.

Ответы [ 3 ]

1 голос
/ 09 мая 2011

У меня все получилось ... Просто смотрел выступление Mix 11 с Скоттом Хансельменом.

Рабочий код ...

 public class Product
 {
    public int Id { get; set; }
    public string Name { get; set; }      
    public string Description { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
 }

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

    public virtual ICollection<Product> Products { get; set; }
 }

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

1 голос
/ 09 мая 2011

Предположим, у вас есть две подобные таблицы (и связанные с ними классы):

Продукт

  • ProductID
  • CategoryID
  • ProductName
  • ....

Категория

  • CategoryID
  • Название категории
  • ...

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

public class ListHelper
    {
        public static IEnumerable<SelectListItem> GetCategoryList()
        {
            using (SiteDataContext db = new SiteDataContext())
            {
                var list = from l in db.Categories()
                           orderby l.CategoryName
                           select new SelectListItem { Value = l.CategoryID.ToString(), Text = l.CategoryName };

                return list.ToList();
            }
        }
    }

По вашему мнению, добавьте комбинированный список, чтобы использовать этот метод:

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Category</legend>
        <div class="editor-label">
            Select a category:
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.CategoryID, Helpers.ListHelper.GetCategoryList())
        </div>
    </fieldset>
    <fieldset>
        <legend>Product</legend>

        <div class="editor-label">
            Product Name:
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.ProductName)
            @Html.ValidationMessageFor(model => model.ProductName)
        </div>

        ...

    </fieldset>
    <p>
        <input type="submit" value="Create" />
    </p>
}

Тогда в вашем посте Action просто получите объект Product и сохраните его в базе данных:

        [HttpPost]
        public ActionResult Add(Product product)
        {
            if (ModelState.IsValid)
            {
                productService.InsertProduct(product);
                productService.Save();
                ...
            }
            else
            {
                return View(product);
            }
        }
0 голосов
/ 08 мая 2011

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

Я знаю, что есть примеры этого здесь на сайте, но вы можете также легко найти пример с помощью Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...