2012-08-29 46 views
22
@Html.DropDownListFor(m => m.branch, CommonMethod.getBranch("",Model.branch), "--Select--", new { @multiple = "multiple" }) 

@Html.DropDownListFor(m => m.division, CommonMethod.getDivision(Model.branch,Model.division), "--Select--", new { @multiple = "multiple" }) 

我有两个DropDownListFor实例。我想为那些以前存储Model.branch和Model.division的值的对象设置为true。这些是存储IDS在Html.DropDownlistFor获取多个选定的值

class CommonMethod 
{ 
    public static List<SelectListItem> getDivision(string [] branchid , string [] selected) 
    { 
     DBEntities db = new DBEntities(); 
     List<SelectListItem> division = new List<SelectListItem>(); 
     foreach (var b in branchid) 
      { 
       var bid = Convert.ToByte(b); 
       var div = (from d in db.Divisions where d.BranchID == bid select d).ToList(); 
       foreach (var d in div) 
       { 
        division.Add(new SelectListItem { Selected = selected.Contains(d.DivisionID.ToString()), Text = d.Description, Value = d.DivisionID.ToString() }); 
       } 
      } 
     } 

     return division; 
    } 
} 

除法的返回值被选择为真模型中的所选择的项目的字符串数组,但在观看侧它没有被选中。

+0

我不明白你的问题。是否简单*如何设置在下拉列表中选择的值?* – Mohayemin

+0

是的,我希望获取要在页面加载时先前存储在数据库中的值。 – user

回答

43

使用的ListBoxFor代替DropDownListFor

@Html.ListBoxFor(m => m.branch, CommonMethod.getBranch("", Model.branch), "--Select--") 

@Html.ListBoxFor(m => m.division, CommonMethod.getDivision(Model.branch, Model.division), "--Select--") 

branchdivision性质显然必须将包含所选值的集合。

和使用视图模型来构建一个多选下拉列表中正确的方式进行全面例如:

public class MyViewModel 
{ 
    public int[] SelectedValues { get; set; } 
    public IEnumerable<SelectListItem> Values { get; set; } 
} 

,将在控制器中填充:

public ActionResult Index() 
{ 
    var model = new MyViewModel(); 

    // preselect items with values 2 and 4 
    model.SelectedValues = new[] { 2, 4 }; 

    // the list of available values 
    model.Values = new[] 
    { 
     new SelectListItem { Value = "1", Text = "item 1" }, 
     new SelectListItem { Value = "2", Text = "item 2" }, 
     new SelectListItem { Value = "3", Text = "item 3" }, 
     new SelectListItem { Value = "4", Text = "item 4" }, 
    }; 

    return View(model); 
} 

,并在视图中:

@model MyViewModel 
... 
@Html.ListBoxFor(x => x.SelectedValues, Model.Values) 

这是HTML助手会自动预先选择其值匹配的项目SelectedValues属性的软管。

+0

谢谢。它的作品,我想 – user

+2

ListboxFor救了我..Wonder为什么dropdwnlist不在这种情况下工作.. – ksg

+0

如果我想要显示所有的值,然后要求用户选择多个选项并发布多个选择后用户提交?是否有可能与上述方法..如果不是,你可以请让我知道如何完成..我可以创建单独的问题,但我觉得这个答案是非常接近我想.. –

8

对我来说,它的工作原理也@Html.DropDownListFor

型号:

public class MyViewModel 
{ 
    public int[] SelectedValues { get; set; } 
    public IEnumerable<SelectListItem> Values { get; set; } 
} 

控制器:

public ActionResult Index() 
{ 
    var model = new MyViewModel(); 

    // the list of available values 
    model.Values = new[] 
    { 
     new SelectListItem { Value = "2", Text = "2", Selected = true }, 
     new SelectListItem { Value = "3", Text = "3", Selected = true }, 
     new SelectListItem { Value = "6", Text = "6", Selected = true } 
    }; 

    return View(model); 
} 

剃刀:

012在控制器
@Html.DropDownListFor(m => m.SelectedValues, Model.Values, new { multiple = "true" }) 

提交SelectedValues样子:

enter image description here enter image description here

+0

区别是,你已经设置在Model.Values中选择的listitem值,并且根本不使用SelectedValues。尝试删除“selected = true”并将一些int添加到SelectedValues,然后它不按预期工作。无论如何,不​​适合我。 –

相关问题