感谢我的帮助 - 我的控制器中有以下代码:
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.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper, string,string)'有一些无效的参数
当我删除新的{style = ....
时,这很好如何设置下拉列表的宽度,而不会出现此错误?
谢谢,
标记
答案 0 :(得分: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;"})
答案 1 :(得分: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
)
因此,您的第一个参数是您正确的名称字符串,但是您需要将SelectList作为第二个参数,将HtmlAttributes作为第三个参数。试试这样:
<div class="editor-field">
@Html.DropDownList("StandID", ViewBag.StandID, new {style = "width:150px"})
</div>
更新:
不确定您是否将正确的内容传递给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;
更新:
以下是我如何完成同样的事情。我有一个返回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())