【问题标题】:ASP.NET MVC 2 DropDownListFor without database没有数据库的 ASP.NET MVC 2 DropDownListFor
【发布时间】:2012-06-23 22:20:07
【问题描述】:

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

我尽我所能通过谷歌搜索,但仍然无法获得我的下拉列表

谢谢

【问题讨论】:

    标签: asp.net-mvc


    【解决方案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
    
    }
    

    从来没有这样的硬编码。它是丑陋的丑陋的!

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

    【讨论】:

    • 谢谢,但我在回发时收到此错误值不能为空。参数名称:items
    【解决方案2】:

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

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

    在模型中获得值后,您可以将其绑定到DropDownListFor&lt;Model&gt;

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

    【讨论】:

    • 是否无法在没有数据库或xml的情况下创建下拉菜单
    • 是的。您可以对它们进行硬编码。您需要动态添加和删除产品吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多