Чтобы сохранить выбранное значение из выпадающего списка в mvc3 nhibernate

Я использую nhibernate и хочу создать простой раскрывающийся список, вот senario: у меня есть класс продукта, состоящий из имени, типа продукта и его значения вместе с идентификатором. Тип продукта здесь является внешним ключом, который является первичным ключом в моем Product_Type. все, что мне нужно сделать, это добавить продукт в таблицы, и для этого мне нужен раскрывающийся список, чтобы показать все типы продуктов

Модель для продукта

  public class Product_Type
{
    public virtual int Prod_Type_Id { get; set; }
    [Required]
    public virtual string Prod_Types { get; set; }
 }

 public class Product
{
    public virtual int Product_Id { get; set; }
    [Required]
    public virtual string Product_Name { get;set; }
    public virtual Product_Type Prod_Types { get; set; }
  }

Я создал файл сопоставления, в котором я сопоставил Product_Types с таблицей Product как внешний ключ.

Я написал это в своем контроллере

  ViewData["prod_types"] = new SelectList(new Product_Service().GetProdType().ToList(), "Product_Type");

где GetProdType - это функция, заполняющая список. В представлении я заполняю свой список как

  @Html.DropDownListFor(Model=>Model.Prod_Types,(IEnumerable<SelectListItem>)ViewData["prod_types"]);

Но это дает мне ошибку, так как нет элемента ViewData типа «IEnumerable», который имеет ключ «Prod_Types».

я искал на другом форуме, но не получил правильного ответа Пожалуйста, помогите мне в этом Спасибо!!


person MVC_Nhibernate    schedule 20.03.2012    source источник
comment
возможный дубликат Создание раскрывающегося списка в MVC nhibernate   -  person Rippo    schedule 20.03.2012


Ответы (1)


Вы использовали тот же ключ в ViewData, что и свойство, к которому вы привязываетесь. Попробуйте так:

ViewData["AvailableProductTypes"] = new SelectList(
    new Product_Service().GetProdType().ToList(), 
    "Prod_Type_Id",
    "Prod_Types"
);

и в представлении:

@model Product_Type
...
@Html.DropDownListFor(
    x => x.Prod_Type_Id,
    (IEnumerable<SelectListItem>)ViewData["AvailableProductTypes"]
)
person Darin Dimitrov    schedule 20.03.2012
comment
По ProdTypeId.... какой идентификатор вы указываете??? один в таблице продуктов, на которой основано мое представление, или в таблице Product_Type, из которой заполняется раскрывающийся список..... пожалуйста, укажите.. - person MVC_Nhibernate; 20.03.2012
comment
Один в вашей модели представления. Тот, который вы хотите использовать позже в действии контроллера POST для чтения выбранного значения. - person Darin Dimitrov; 20.03.2012
comment
....предлагаете мне создать модель представления для этого??? Потому что это снова дает мне ошибку для привязки данных, поскольку: «System.String» не содержит свойства с именем «ProductTypeId». - person MVC_Nhibernate; 20.03.2012
comment
Я не использую никакую модель представления... я не могу создать это без этого - person MVC_Nhibernate; 20.03.2012
comment
Итак, свойство Prod_Types имеет строковый тип? В этом случае вы можете оставить его в качестве первого аргумента, но затем использовать другой ключ в ViewData, а не prod_types. Что касается модели представления, это не является обязательным требованием. Вы можете сделать это без модели представления. Писать правильный код не обязательно. - person Darin Dimitrov; 20.03.2012
comment
Я могу показать вам пример, но, поскольку я рекомендую использовать модели представления, мой пример будет содержать их. Но поскольку вы сказали, что не хотите использовать модели просмотра, если хотите, чтобы я помог вам, вы можете показать свои модели, чтобы я мог увидеть, что вы делаете неправильно. - person Darin Dimitrov; 20.03.2012
comment
@ Дарин Димитров: я обновил свой вопрос, не могли бы вы взглянуть на него и сказать мне, где я ошибаюсь? - person MVC_Nhibernate; 20.03.2012
comment
Dimtrov.... Я забыл сказать вам, что мое представление зависит от продукта, а не от Product_Type..... так что теперь я могу сделать...??Должен ли я создать модель представления?? - person MVC_Nhibernate; 20.03.2012
comment
@MVC_Nhibernate, да, вы должны создать модель представления. Но, как я уже объяснил, это не требуется. Разве у вас нет скалярного свойства в этом классе Product, к которому вы могли бы привязать выбранное значение? Если вы этого не сделаете, вы можете использовать слабо типизированную версию: @Html.DropDownList("SelectedProductTypeId", (IEnumerable<SelectListItem>)ViewData["AvailableProductTypes"]) - person Darin Dimitrov; 20.03.2012