【问题标题】:How to Select selected items in edit mode Multiselect Dropdown in MVC C#如何在 MVC C# 中的编辑模式下多选下拉菜单中选择所选项目
【发布时间】:2015-11-26 23:50:18
【问题描述】:

我想在编辑模式下选择我选择的项目。我正在使用多选下拉菜单,如下所示:

@Html.DropDownListFor(m => Model.BRAND_ID, Model.BRAND_List, null,
      new { @class = "inputbox", multiple = "multiple",@style="height:120px;"})

不,当我在编辑模式下打开表单时,它总是突出显示单个项目而不是多个我的值是来自 DB 的多个。

这是我迄今为止尝试过的:

public List<Brands> BrandsList() {
    DataSet ds;
    DataTable dt;
    List<Brands> BrandsList = new List<Brands>();

    ds = Cls_EM_Admin_BRANDS.getBrands();
    dt = ds.Tables[0];
    //BrandsList.Add(new Brands { Brand_ID = 0, Brand_Name ="Select"});
    int i = 0;

    foreach (DataRow item in dt.Rows) {
        BrandsList.Add(new Brands { 
            Brand_ID = Convert.ToInt32(item["ID"]),
            Brand_Name = item["Title"].ToString()
        });
    }
    return BrandsList;
}

if (ID != null) {  ///this condition runs on edit
    var objModel_Brands = new EM_BrandAdmin_Model()
        .Get_BrandAdmin_DATA(Convert.ToInt32(ID));
    BrandsSelect_List = new SelectList(
    BrandsList(), "Brand_ID", "Brand_Name", objModel_Brands.BrandID);
    objModel_Brands.BRAND_List = BrandsSelect_List;

    return view(objModel_Brands)
}

public EM_BrandAdmin_Model Get_BrandAdmin_DATA(Int32 P_ADMIN_ID) {
    try {
        objModel_BrandAdmin = new EM_BrandAdmin_Model();
        cmd = new OracleCommand("SP_BRAND_ADMIN_LIST", cn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Prepare();
        cmd.Parameters.Add(new OracleParameter("P_ADMIN_ID", OracleDbType.Int32))
            .Value = P_ADMIN_ID;

        cn.Open();
        dr = cmd.ExecuteReader();
        while (dr.Read()) {
            objModel_BrandAdmin = new EM_BrandAdmin_Model();
            objModel_BrandAdmin.ADMIN_ID = Convert.ToInt32(dr["ADMIN_ID".ToUpper()]);
            objModel_BrandAdmin.BRAND_ID = Convert.ToInt32(dr["BRAND_ID"]);
        }
    }
    catch (Exception ex) {
        throw ex;
    }
    finally {
        cn.Close();
        if (dr != null) {
            dr.Close();
        }
    }
    return objModel_BrandAdmin;
}

【问题讨论】:

  • Bran_ID 只设置单个值..怎么可能多选项目

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


【解决方案1】:

在你的模型中,改变

public int BRAND_ID { get; set; }
public List<Brands> BRAND_List { get; set; }

public List<int> BRAND_ID { get; set; }
public IEnumerable<SelectListItem> BRAND_List { get; set; }

在你看来,改变

@Html.DropDownListFor(m => Model.BRAND_ID, Model.BRAND_List, null, new { @class = "inputbox", multiple = "multiple",@style="height:120px;"})

@Html.DropDownListFor(m => m.BRAND_ID, Model.BRAND_List, null, new { @class = "inputbox", multiple = "multiple",@style="height:120px;"})

在您的 Brands 类中,添加

public bool Selected { get; set; }

在你的控制器中,改变

BrandsList.Add(new Brands { Brand_ID = Convert.ToInt32(item["ID"]), Brand_Name = item["Title"].ToString() });
...
BrandsSelect_List = new SelectList(BrandsList(), "Brand_ID", "Brand_Name", objModel_Brands.BrandID);

BrandsList.Add(new Brands { Brand_ID = Convert.ToInt32(item["ID"]), Brand_Name = item["Title"].ToString(), Selected = true });
//Note: replace "true" above with code to retrieve the selection from the db
...
BrandsSelect_List = new List<SelectListItem>();
foreach (Brands b in BrandsList()){
    BrandsSelect_List.Add(new SelectListItem(){ Value = b.BRAND_ID, Text = b.Brand_Name, Selected = b.Selected }
}

这是demo

但是,我建议您使用ListBoxFor 而不是DropDownListFor,因为它会使您的代码更简单。如果您想使用ListBoxFor,请忽略上面的解决方案并执行以下操作:

在你的模型中,改变

public int BRAND_ID { get; set; }
public List<Brands> BRAND_List { get; set; }

public List<int> BRAND_ID { get; set; }
public IEnumerable<SelectListItem> BRAND_List { get; set; }

在你看来,改变

@Html.DropDownListFor(m => Model.BRAND_ID, Model.BRAND_List, null, new { @class = "inputbox", multiple = "multiple",@style="height:120px;"})

@Html.ListBoxFor(m => m.BRAND_ID, Model.BRAND_List, new { @class = "inputbox", @style="height:120px;"})

在你的控制器中,改变

objModel_BrandAdmin.BRAND_ID = Convert.ToInt32(dr["BRAND_ID"]);

要从数据库中读取整数列表,这个列表是你的选择。

这是demo

【讨论】:

  • 实际上它不会“选择”任何东西 Selected 属性被 DropDownListFor() 方法完全忽略。它的属性值(需要是IEnumerable&lt;int&gt;)决定选择什么
  • 它将选择所有值 true...如果我有 1 true 和 1 false 怎么办?
  • 是的,由于Selected = true,它将全选为真。我在那里给你留下了一条评论,你必须用代码替换上面的true,才能从数据库中检索选择。你这样做了吗?选择应该保存在您的数据库中,因此您需要检索它,但为了测试,您可以将BrandsList 的一些项目分配给false,看看它是如何工作的。
  • @RacilHilan。它会选择任何选项。阅读我的第一条评论! BRAND_ID 的值决定了选择的内容。这就是模型绑定的工作原理。
  • @StephenMuecke 既然您知道,请发布答案,以便其他人可以从您的知识中受益。我已经在我的答案中添加了演示,清楚地证明了 Selected 正确地被 NOT 忽略,并且相应地选择了项目。单个int 属性的值适用于DropDownListFor,但多个IEnumerable&lt;int&gt; 不会,除非您将其更改为ListBoxFor
猜你喜欢
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 2016-01-06
  • 2011-03-08
  • 1970-01-01
相关资源
最近更新 更多