2016-03-02 61 views
5

我相信我已经正确绑定了我的数据,但我似乎无法让每个SelectListItem的文本属性正确显示。为什么我在我的DropDownList中获得“System.Web.Mvc.SelectListItem”?

我的模型:

public class Licenses 
    { 
     public SelectList LicenseNames { get; set; } 
     public string SelectedLicenseName { get; set; } 
    } 

控制器:

[HttpGet] 
    public ActionResult License() 
    { 
     try 
     { 
      DataTable LicsTable = BW.SQLServer.Table("GetLicenses", ConfigurationManager.ConnectionStrings["ProfressionalActivitiesConnection"].ToString()); 
      ProfessionalActivities.Models.Licenses model = new ProfessionalActivities.Models.Licenses(); 
      model.LicenseNames = new SelectList(LicsTable.AsEnumerable().Select(row => 
      new SelectListItem 
      { 
       Value = row["Description"].ToString(), 
       Text = "test" 
      })); 
      return PartialView("_AddLicense", model); 
     } 
     catch (Exception ex) 
     { 
      var t = ex; 
      return PartialView("_AddLicense"); 
     } 
    } 

查看:

@Html.DropDownList("LicenseNames", new SelectList(Model.LicenseNames, "Value", "Text", Model.LicenseNames.SelectedValue), new { htmlAttributes = new { @class = "form-control focusMe" } }) 
+1

除了Shyju的回答,请注意'DropDownList()'的第二个参数是'IEnumerable '。你可以用'new SelectListItem {Value = row [“Description”]创建它。ToString(),Text =“test”})'这就是你所需要的。使用'new SelectList()'(在那里你忘记设置Text和Value的属性)在控制器中创建第二个相同的控件,然后在视图中创建第三个相同的控件是没有意义的额外开销。 –

回答

7

使用您LicenseNames财产Items财产类型为SelectList

@Html.DropDownList("SelectedLicenseName", new SelectList(Model.LicenseNames.Items, 
             "Value", "Text", Model.LicenseNames.SelectedValue)) 

或者与DropDownListFor helper方法

@Html.DropDownListFor(d=>d.SelectedLicenseName, 
             Model.LicenseNames.Items as List<SelectListItem>) 

所以,当您发布表单,您可以检查SelectedLicenseName财产

[HttpPost] 
public ActionResult Create(Licenses model) 
{ 
    //check model.SelectedLicenseName 
} 
+0

好吧,这工作。现在,我如何从SelectList中将选定值分配给我的SelectedLicenseName属性? – JzInqXc9Dg

+0

查看我的更新回答。您需要将表单元素名称用作“SelectedLicenseName”,并在表单发布时阅读该表单。 – Shyju

+0

所以使用你的第二个选项 - DropDownListForm,我得到这个错误,当我尝试最初调用局部视图。 附加信息:没有类型为'IEnumerable '的ViewData项具有密钥'SelectedLicenseName'。 – JzInqXc9Dg

0

我明确设置dataValueFielddataTextField名。

new SelectListItem 
{ 
    Value = row["Description"].ToString(), 
    Text = "test" 
}), "Value", "Text"); 

那么就没有必要写在你的意见Model.LicenseNames.Items as List<SelectListItem>(在你接受的答案建议)。

相关问题