没有数据库的ASP.NET MVC 2 DropDownListFor

时间:2012-06-23 13:36:31

标签: asp.net-mvc

我是MVC的新手我正在尝试使用TextBox和DropDownList字段创建一个小型产品表单,我在模型中使用personName,productName创建了一个类。我只有5个产品,所以我不想使用db。

我通过谷歌尝试了所有我能做的但仍然无法获得我的下拉列表

由于

2 个答案:

答案 0 :(得分:1)

如果您不想使用数据库,则可以创建存储所有产品信息的XML文档。

然后,您可以创建一个使用XML解析器的模型来获取XML文档中的所有值。

在模型中获得值后,您可以将其绑定到DropDownListFor<Model>

如果产品没有更改,您也可以将产品硬编码到DropDownList中。

答案 1 :(得分:1)

假设你有一个PersonsProduct类来表示你的模型/视图模型

public class PersonsProduct
{

    public string PersonName { set;get;}
    public IEnumerable<SelectListItem> Products { get; set; }
    public string SelectedProductId { get; set; }
    //Other Properties
}

GET操作方法中,您可以初始化像这样的值

public ActionResult AddProduct()
{
    var objProduct = new PersonsProduct();
    objProduct.Products = new[]
    {
          new SelectListItem { Value = "1", Text = "Book" },
          new SelectListItem { Value = "2", Text = "Pen" },
          new SelectListItem { Value = "3", Text = "Computer" },
          new SelectListItem { Value = "4", Text = "Table" },
          new SelectListItem { Value = "5", Text = "Mouse" }
    };
    // can replace the above line with loading data from Data access layer.
    return View(objProduct);
}

在您的视图中,强烈键入PersonsProduct viewmodel

@model PersonsProduct 
@using (Html.BeginForm())
{ 
  @Html.DropDownListFor(x => x.SelectedProductId, new SelectList(Model.Products ,"Value","Text"), "Select..")
  <input type="submit" value="save" />
}

在您的HTTPPost操作中,您可以像这样获得所选的productId

[HttpPost]
public ActionResult Index(PersonsProduct model)
{
 //  check model.SelectedProductId here

}

从来没有像这样的硬编码。这是UGLY UGLY UGLY!

这回答了您的问题(不使用数据库和XML)。 但我强烈建议避免使用这种硬编码方法。您最好将不同的源用于数据库/ XML文件等产品列表。否则,只要您想要将新产品添加到列表中,就需要重新编译。我希望您将此代码更改为从不同的源而不是硬编码值读取产品数据。