编辑不适用于Html.DropDownList和@class属性

时间:2011-11-11 18:30:14

标签: asp.net asp.net-mvc asp.net-mvc-3 razor

控制器:

ViewBag.Category = new SelectList(this.service.GetAllCategories(), product.Category);

我没有使用Id + Name。 GetAllCategories()只返回几个int数。

当我在视图中使用时:

@Html.DropDownList("Category", String.Empty)
一切正常。编辑正常,DropDownList显示所选值。 HTML结果:

<select id="Category" name="Category">
<option value=""></option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option selected="selected">5</option>
...
</select>

但我需要使用css @class,所以我使用这段代码:

@Html.DropDownList("Category", (IEnumerable<SelectListItem>)ViewBag.Category, new { @class = "anything" })

HTML结果:

<select class="anything" id="Category" name="Category">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
...
</select>

不幸的是,编辑仍然有效(我可以保存我选择的值),但 DropDownList开始显示默认值而不是数据库中保存的值

你有什么想法会有什么问题吗?

更新 我做了更新更准确。

GetAllCategories方法如下所示:

public List<int> GetAllCategories()
        {
            List<int> categories = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

            return categories;
        }

3 个答案:

答案 0 :(得分:6)

Html.DropDownList非常有趣:
 如果您没有提供选择列表

@Html.DropDownList("Category", String.Empty)

它会根据提供的属性名称ViewData/ViewBagCategory查找选择的值。ViewData/ViewBag。 但是,如果您提供选择列表,它将根据提供的属性名称Category@Html.DropDownList("Category", null, new { @class = "anything" })中查找默认选定项目,当然这将包含列表而不是默认值。要解决此问题,您有两种选择:

不提供选择列表:

ViewBag

或者
使用其他名称代替Category属性名称@Html.DropDownList("CategoryDD", (IEnumerable<SelectListItem>)ViewBag.Category, new { @class = "anything" })

{{1}}

答案 1 :(得分:0)

 SelectList typelist = new SelectList(this.service.GetAllCategories(), "ProductID", "ProductName", product.Category);
ViewBag.Category=typelist;

我认为从您的表中您必须提供默认值“ProductID”和文本“ProductName”或您使用和想要显示的值,以便可以为此结果生成列表。

不确定您的问题到底是什么,但您可以尝试一下,也许它会解决它。

答案 2 :(得分:0)

您可以使用html帮助程序的下拉列表。请注意,视图中需要您期望的“模型”。

@Html.DropDownListFor(model => model.savedID,
   (IEnumerable<SelectListItem>)ViewBag.Category, new { @class = "anything" })