2016-01-22 66 views
4

我有一個Age屬性的int屬性以及可供選擇的可能年齡的選擇列表。檢索用於編輯數據的情況下,我加入寫着toString()方法時得到一個錯誤:將int轉換爲字符串用於下拉列表

模板只能與現場訪問,屬性訪問,一維數組索引,或單參數被用於自定義索引器表達式。

所以我的視圖模型的樣子:

public int LowerAgeLimit { get; set; } 
public List<SelectListItem> Ages { get; set; } 

我查詢正確檢索數據,然後在視圖中,我想有這樣的顯示數據:

@Html.DropDownListFor(x => x.LowerAgeLimit.ToString() 
         , Model.CreateGroupForm.Ages 
         , new { @class = "form-control" }) 

無tostring()方法,它顯示空白,因爲它期待一個字符串。但它不會讓我轉換成沒有錯誤的字符串。我也嘗試在viewmodel中創建一個新的字符串Age屬性,並將int轉換爲查詢中的字符串,但我仍然無法獲取下拉列表以顯示值。

在查詢我已填充歲列表如下:

model.CreateGroupForm.Ages.Insert(0, (new SelectListItem { Text = "", Value = "" })); 
     for (int i = 1; i < 100; i++) 
     { 

      model.CreateGroupForm.Ages.Insert(i, (new SelectListItem {Text = i.ToString(), Value = i.ToString()})); 
     } 
+0

你不需要的ToString() - 轉換爲int由模型聯編程序自動處理。我有大量的帶有整數參數的Html.DropDownListFor。 – Richard

+0

好吧知道,任何想法爲什麼它不顯示數據呢? – BMills

+0

我想你需要告訴我們你是如何填充Model.CreateGroupForm.Ages – jomsk1e

回答

2

我已經創建了一個新的MVC項目並嘗試以下操作:
型號:

public class Test 
{ 

    public int LowerAgeLimit { get; set; } 

    public List<SelectListItem> Ages 
    { 
     get;set; 
    } 
} 

查看:

@model WebApplication1.Models.Test 
@Html.DropDownListFor(x => x.LowerAgeLimit, Model.Ages) 

控制器:

 public ActionResult Index() 
    { 
     Test tst = new Test(); 

     tst.Ages = new List<SelectListItem>(); 
     tst.Ages.Insert(0, (new SelectListItem { Text = "", Value = "" })); 
     for (int i = 1; i < 100; i++) 
     { 
      tst.Ages.Insert(i, new SelectListItem { Text = i.ToString(), Value = i.ToString() }); 
     } 


     return View(tst); 
    } 

編輯: 更新完的方式中世紀列表中填充我的下拉仍在工作,但有一個空值是在下拉列表中的第一個。檢查編輯的控制器。
Here's the result

+0

我已經編輯了OP與我如何填充年齡列表。 – BMills

0

它看起來像你在年齡開始時添加一個虛擬行 - 這是不必要的。嘗試做以下修改:

型號:

[Required] 
public int? LowerAgeLimit { get; set; } 

查看:

@Html.DropDownListFor(x => x.LowerAgeLimit.ToString() 
        , Model.CreateGroupForm.Ages 
        , new { @class = "form-control" }, 
        , "(Choose)") 

控制器:

for (int i = 1; i < 100; i++) 
{ 
    model.CreateGroupForm.Ages.Add(new SelectListItem {Text = i.ToString(), Value = i.ToString()}); 
} 

DropDownListFor的第四個參數控制什麼是 「虛擬」 項應是,並確保它在模型上映射爲null(Required屬性將確保如此mething被選中)。

另外,你可以使用一個數字控制!

@Html.TextBoxFor(x => x.LowerAgeLimit, 
    new { @class = "form-control", type = "number", min = "1", max = "99"}) 
+0

感謝所有的想法,不幸的是它仍然沒有使用建議的解決方案。將會與某人討論Skype,因爲代碼中必定會有一些有趣的事情發生。 – BMills

0

試試這個在您的視圖模型:

public int LowerAgeLimit { get; set; } 
public SelectList Ages { get; set; } 

要填充,試試這個:

var items = new List<SelectListItem>(); 
items.Insert(0, (new SelectListItem { Text = "", Value = "" })); 
for (int i = 1; i < 100; i++) 
{ 

    items.Insert(i, (new SelectListItem {Text = i.ToString(), Value = i.ToString()})); 
} 

model.CreateGroupForm.Ages = new SelectList (items, "Value", "Text", null); 

您的看法:

@Html.DropDownListFor(x => x.LowerAgeLimit, (SelectList)Model.CreateGroupForm.Ages, new { @class = "form-control" })