Получение нескольких значений флажков и поместите их в Icollection MVCC#

Место общения программистов C#
Ответить
Anonymous
 Получение нескольких значений флажков и поместите их в Icollection MVC

Сообщение Anonymous »

Я хочу знать, как получить значения нескольких флажков. У меня есть диаграмма и код, пожалуйста, взгляните на него. Мне нужно сделать несколько шагов:
  • Поместить все категории из таблицы «Категории» в файл «Продукт»/Создать файл как флажки (что поместит входные данные в таблицу «Продукты»)
  • Извлечь выбранные флажки
  • для каждого выбранного флажка, добавить продукт в собственный список в таблице категорий
Позже мне нужно будет отобразить каждую категорию с соответствующими продуктами.
Надеюсь, это имеет смысл. Вот мой код. Я не хочу создавать еще один файл/модель/представление/контроллер, если это возможно. Я перевел все на английский, чтобы было легче читать.
Модель категории:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebshopMVC.Models
{
public class Category
{
public int ID { get; set; }
public string Image { get; set; }
public string Name { get; set; }
public string Description{ get; set; }

public virtual ICollection
 Producten { get; set; }
}
}
Модель продукта:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebshopMVC.Models
{
public class Product
{
public int ID { get; set; }
public string Image { get; set; }
public string Name{ get; set; }
public string Description{ get; set; }
public decimal Price{ get; set; }

public virtual ICollection Categories{ get; set; }

public virtual ICollection Offers{ get; set; }

}
}
Продукт/Create View:

Код: Выделить всё

@model WebshopMVC.Models.Categorie

@{
ViewBag.Title = "Create";
}

Create

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()

[h4]Categorie[/h4]

@Html.ValidationSummary(true)


@Html.LabelFor(model => model.Image, new { @class = "control-label col-md-2" })

@Html.EditorFor(model => model.Image)
@Html.ValidationMessageFor(model => model.Image)



@Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })

@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)



@Html.LabelFor(model => model.Description, new { @class = "control-label col-md-2" })

@Html.EditorFor(model => model.Description)
@Html.ValidationMessageFor(model => model.Description)








}

@Html.ActionLink("Back to List", "Index")

Контроллер продукта (Создать)

Код: Выделить всё

public ActionResult Create()
{
return View();
}

// POST: /Product/Create
// To protect from overposting attacks, please enable the specific     properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include =          "ID,Image,Name,Description,Price,Categories")] Product product)
{
if (ModelState.IsValid)
{
db.Producten.Add(product);

db.SaveChanges();
return RedirectToAction("Index");
}

return View(product);
}

И вот схема того, как это должно быть:
Изображение

Это просто изображение на голландском языке, поэтому я дам вам английский перевод:

Код: Выделить всё

Categorie => Category
plaatje => Image
naam => Name
omschrijving => Description

Product => Product
plaatje => Image
naam => Name
omschrijving => Description
Prijs =>  Price
Итак, еще раз:
  • Позвольте пользователю создать продукт и назначить 1 или несколько категорий, которые будут получены из таблицы «Категории».
  • Получите выбранные категории, добавьте их в список «Категории» в модели продукта.
  • Добавьте продукт в список «Продукты» в модели «Категории».
  • Позже мне нужно будет иметь возможность циклически просматривать категории и получать их продукты, чтобы иметь возможность ссылаться на них.
Шаги 2 и 3 могут показаться немного странными, но в соответствии с модель, категория имеет * продукты, а продукт имеет 1 или несколько категорий, поэтому я также закодировал его таким же образом.
Я добавил модель представления в свой проект.

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebshopMVC.Models
{

public class ProductCategoryViewModel
{
public string Image{ get; set; }
public string Name { get; set; }
public string Description{ get; set; }
public decimal Price { get; set; }

public IEnumerable Categories { get; set; }

public ProductCategoryViewModel()
{
Categories = Categories.ToList();
}
}
}
Я также изменил файл продукта/create.cshtml:

Код: Выделить всё

@Html.LabelFor(model => Model.Categories)

@foreach (var item in Model.Categories)
{
@(item.Name)
}


Теперь я получаю сообщение об ошибке при попытке перейти на страницу «Продукт/Создание»:
Ссылка на объект не установлена ​​на экземпляр объекта. (Строка 54)

Код: Выделить всё

Line 52:             @Html.LabelFor(model => Model.categories)
Line 53:             
Line 54:                 @foreach (var item in Model.categories)
Line 55:                 {
Line 56:                     @(item.Name)
Я не знаю, как исправить эту ошибку, и я также не понимаю, как это работает.
Как эта ProductCategoryViewModel извлекает информацию из базы данных/таблицы категорий. Я нигде не вижу ссылки.
Я добавлю свою диаграмму классов, возможно, это поможет:
![Диаграмма базы данных] (Изображение)

Подробнее здесь: https://stackoverflow.com/questions/285 ... ection-mvc
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»