2016-03-02 56 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>(在你接受的答案建議)。

相關問題