如何使下拉列表在asp.net mvc中显示选定的值?

问题描述:

我有在它Html.DropDownList编辑页面....我不能显示下拉列表值总是显示了Select,而不是我想要的下拉显示项目基于模型值说Model.Mes_Id的选择。 ..任何建议,如何可以做到...如何使下拉列表在asp.net mvc中显示选定的值?

 <p> 
      <label for="MeasurementTypeId">MeasurementType:</label> 
     <%= Html.DropDownList("MeasurementType", // what should i give here?)%> 
      <%= Html.ValidationMessage("MeasurementTypeId", "*") %> 
     </p> 

编辑:它的列表项,但我想显示编辑视图中选择一个值...

public ActionResult Edit(int id) 
    { 
     var mesurementTypes = consRepository.FindAllMeasurements(); 
     ViewData["MeasurementType"] = mesurementTypes; 
     var material = consRepository.GetMaterial(id); 
     return View("Edit", material); 
    } 

我的存储库方法,

public IEnumerable<SelectListItem> FindAllMeasurements() 
     { 
      var mesurements = from mt in db.MeasurementTypes 
           select new SelectListItem 
           { 
           Value = mt.Id.ToString(), 
           Text= mt.Name 
           }; 
      return mesurements; 
     } 
+0

更多细节请。您发布的代码完全符合它的要求。用一个选项创建一个

+0

@约翰考虑我的下拉列表中包含9项....'Model.Mes_Id = 5',我想在我的编辑视图中选择与价值'5' MeasurementType 通过'http://本地主机:1985 /材料/编辑/ 13 '.. – 2010-05-04 04:47:41

在创建IEnumerable<SelectListItem>设置选择项。

个人而言,我会为表单创建一个专门的视图模型,而是由你的代码去,这样做:

public ActionResult Edit(int id) 
{ 
    //Put this first 
    var material = consRepository.GetMaterial(id); 
    //pass in your selected item 
    var mesurementTypes = consRepository.FindAllMeasurements(material.MeasurementTypeId); 
    ViewData["MeasurementType"] = mesurementTypes; 

    return View("Edit", material); 
} 

然后改变你的资料库的方法是这样的:

public IEnumerable<SelectListItem> FindAllMeasurements(int selectedId) 
{ 
    var mesurements = from mt in db.MeasurementTypes 
         select new SelectListItem 
         { 
         Value = mt.Id.ToString(), 
         Text= mt.Name, 
         Selected = mt.Id == selectedId 
         }; 

    return mesurements; 
} 

HTHS,
Charles

+0

@Charlino奏效.. ......它的工作原理进行编辑,但如何将用于添加视图这种方法的行为在这里我不想选择的值... – 2010-05-04 05:37:07

+0

如果你只是传递0无应选择的价值观 - 假设你没有MeasurementType ID为0!:-) – Charlino 2010-05-04 05:40:21

+0

你刚刚做到了......干杯! – 2010-05-04 05:41:56

看一看这个博客条目。

http://weblogs.asp.net/ashicmahtab/archive/2009/03/27/asp-net-mvc-html-dropdownlist-and-selected-value.aspx

基本上,你需要你的mesurementTypes列表/枚举转换成SelectListIEnumerable<SelectListItem>

我会建议,如果可能的话,升级到ASP.NET MVC2和使用Html.DropDownListFor()

+0

@alastair我用'的IEnumerable '在我的仓库类,那么为什么我不能能够设置... – 2010-05-04 05:20:48

你应该返回它可以指定所选项目的SelectionList。

How to create a DropDownList with ASP.NET MVC

+0

@griegs任何建议如何可以做到... – 2010-05-04 05:18:15

假设Model.Mes_Id contais选择的值,你可以做这样的事情

<% 
    var Measurements = new SelectList((IEnumerable)ViewData["MeasurementType"], "Id", "Name", Model.Mes_Id); 
    Response.Write(Html.DropDownList("measurement_type", Measurements, "Select")); 
%> 

Html.DropDownListFor对我不起作用所以我得到了这样的罂粟

(in Edit method) 

    CreatList(long.Parse(wc.ParentID.ToString())); 


    private void CreatList(long selected= 0) 
    { 
     SqlConnection conn = new SqlConnection(Config.ConnectionStringSimple); 
     conn.Open(); 
     Category wn = new Category(conn); 
     CategoryCollection coll = new CategoryCollection(); 
     Category.FetchList(conn, ref coll); 

     ViewBag.ParentID = GetList(coll, selected); 
    } 


    private List<SelectListItem> GetList(CategoryCollection coll, long selected) 
    { 
     List<SelectListItem> st = new List<SelectListItem>(); 
     foreach (var cat in coll) 
     { 
      st.Add(new SelectListItem 
      { 
       Text = cat.Name, 
       Value = cat.ID.ToString(), 
       Selected = cat.ID == selected 
      }); 

     } 
     SelectListItem s = new SelectListItem { 
           Text = Resources.lblSelect, 
           Value = "0" 
     }; 
     st.Insert(0, s); 
     return st; 
    } 


    <div class="editor-label"> 
     @Html.LabelFor(model => model.ParentID) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownList("ddlCat", (List<SelectListItem>)ViewBag.ParentID) 
     @Html.ValidationMessageFor(model => model.ParentID) 
    </div>