控制器:
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;
}
答案 0 :(得分:6)
Html.DropDownList
非常有趣:
如果您没有提供选择列表
@Html.DropDownList("Category", String.Empty)
它会根据提供的属性名称ViewData/ViewBag
从Category
查找选择的值。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" })