2012-10-04 44 views
0

感謝幫助我來到這裏 - 我在我的控制器下面的代碼:MVC的SelectList設置控制寬度鑑於

var stands = db.Stands.ToList().Where(s => s.ExhibitorID == null) 
       .Select(s => new SelectListItem 
       { 
        Value = s.StandID.ToString(), 
        Text = s.Description + "-- £" + s.Rate.ToString() 
       }); 


     ViewBag.StandID = new SelectList(stands, "Value", "Text"); 

,呈現在我的觀點是這樣的:

<div class="editor-field"> 
    @Html.DropDownList("StandID", new {style = "width:150px"}) 
</div> 

但是,在我看來,我得到以下錯誤:

CS1928:'System.Web.Mvc.HtmlHelper'不包含'DropDownList'的定義和最佳擴展方法重載'System.Web.Mvc.Html。 SelectExt ensions.DropDownList(System.Web.Mvc.HtmlHelper,字符串,字符串)」有一些無效參數

這是很好,當我刪除新{風格= ....

如何設置的寬度dropdownlist,沒有得到這個錯誤?

謝謝

馬克

回答

3

你需要做一些改變。首先,從這個改變你的控制器代碼:

ViewBag.StandID = new SelectList(stands, "Value", "Text"); 

要這樣:

ViewBag.StandList = new SelectList(stands, "Value", "Text"); 

其次,改變你的助手這樣的:

@Html.DropDownList("StandID", (SelectList)ViewBag.StandList, new {style = "width:150px"}) 

確保HTML元素的名稱是非常重要的與收集物品不同,否則會出現各種問題。

使用強類型視圖模型甚至更好。

@Html.DropDownListFor(m => m.StandID, Model.StandList, new {style="width:150px;"}) 
+0

DropDownList是否有一個有效的接口,接受第二個Int參數? –

+1

@BenFinkel - 你在看舊的版本的帖子,我已經改變了不正確的參數。 –

+0

不知道我在做什麼 - 但關閉,重新加載 - 我不再收到錯誤 - 非常感謝。 – Mark

1

你沒有傳遞正確的參數@ Html.DropDownList。從MSDN文檔在這裏:http://msdn.microsoft.com/en-us/library/dd470380(v=vs.100).aspx

它看起來像你想使用以下過載:

public static MvcHtmlString DropDownList(
    this HtmlHelper htmlHelper, 
    string name, 
    IEnumerable<SelectListItem> selectList, 
    Object htmlAttributes 
) 

所以,你的第一個參數是你有正確的名稱字符串,但隨後你需要選擇列表的作爲你的第二個參數和你的HtmlAttributes作爲你的第三個參數。試着這樣說:

<div class="editor-field"> 
    @Html.DropDownList("StandID", ViewBag.StandID, new {style = "width:150px"}) 
</div> 

UPDATE:

不知道你正在傳遞正確的事情到您的ViewBag無論是。您將它設置爲等於一個新的SelectList對象,並且DropDownList需要一個SelectListItems集合。

試試這個在您的控制器:

var stands = db.Stands.ToList().Where(s => s.ExhibitorID == null)     
    .Select(s => new SelectListItem     
    {      
     Value = s.StandID.ToString(),      
     Text = s.Description + "-- £" + s.Rate.ToString() 
    });      


ViewBag.StandID = stands; 

UPDATE:

這是我如何做到同樣的事情。我有一個靜態方法返回一個IEnumerable然後我在我的視圖中引用該方法。 (對不起VB語法)

Namespace Extensions 


    Public Module Utilities 

     Public Function SalutationSelectList(Optional ByVal Salutation As String = "") As IEnumerable(Of SelectListItem) 


      Dim ddl As New List(Of SelectListItem) 

      ddl.Add(New SelectListItem With {.Text = "", .Value = "", .Selected = If(Salutation = "", True, False)}) 
      ddl.Add(New SelectListItem With {.Text = "Mr.", .Value = "Mr.", .Selected = If(Salutation = "Mr.", True, False)}) 
      ddl.Add(New SelectListItem With {.Text = "Ms.", .Value = "Ms.", .Selected = If(Salutation = "Ms.", True, False)}) 
      ddl.Add(New SelectListItem With {.Text = "Mrs.", .Value = "Mrs.", .Selected = If(Salutation = "Mrs.", True, False)}) 
      ddl.Add(New SelectListItem With {.Text = "Dr.", .Value = "Dr.", .Selected = If(Salutation = "Dr.", True, False)}) 

      Return ddl 

     End Function 
    End Module 
End Namespace 



@Html.DropDownListFor(Function(org) org.Salutation, SalutationSelectList()) 
+0

FWIW我從來沒有通過ViewBag傳遞SelectList,但我沒有理由它不工作。 –

+0

嗨 - 謝謝你嘗試 - 我複製/粘貼它,但得到了同樣的錯誤:CS1973:'System.Web.Mvc.HtmlHelper '沒有可用的方法名爲'DropDownList',但似乎有一個這個名字的擴展方法。擴展方法不能動態分派。考慮轉換動態參數或調用擴展方法而不使用擴展方法語法。 – Mark