如何在MVC中创建复杂的“创建”ActionResult

时间:2015-03-25 16:07:31

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我对MVC很新,并尝试做一个项目。我有从数据库创建的产品型号。它具有如下属性(我现在正在编写所有属性。)

Product
-------
ID(int)
CODE(string)
CATEGORY_ID(int)

Categories
-------
ID(int)
CODE(string)

我创建了Create ActionResult for Product。由于CATEGORY_ID在数据库中是整数,因此Visual Studio为CATEGORY_ID创建了一个文本框。我希望它是dropdownlist,它将列出Categories表中的所有类别。但是当用户单击Save按钮时,它会将所选类别的整数值写入Product表。

我该怎么做那个下拉列表?如何将所有类别传递给Product的Create ActionResult?

2 个答案:

答案 0 :(得分:1)

您希望使用ViewModel将数据库模型塑造为演示目的。

答案 1 :(得分:0)

在模型类产品中添加以下内容,

[NotMapped]
    public SelectList Categories { get; set; }

在视图中添加

@Html.DropDownListFor(model => model.CategoryID, Model.Categories, "--Select--", new { @id="drpCommodity"})   

使用以下

填写类别
public static SelectList GetDropDownList<T>(List<T> objects, string value, string text)
    {
        List<SelectListItem> items = new List<SelectListItem>();
        //var defaultItem = new SelectListItem();
        //defaultItem.Value = Convert.ToString(-1);
        //defaultItem.Text = "--Select--";
        //defaultItem.Selected = true;
        //items.Add(defaultItem);

        List<SelectListItem> lst = objects
                .Select(x =>
                        new SelectListItem
                        {
                            Value = x.GetType().GetProperty(value).GetValue(x).ToString(),
                            Text = x.GetType().GetProperty(text).GetValue(x).ToString()
                        }).ToList();

        items.AddRange(lst);
        return new SelectList(items, "Value", "Text");
    }