您不应该使用与下拉列表的第一个参数相同的名称作为第二个参数。在您的示例中,您已用于productType
存储所选值和可用值列表。为了在 ASP.NET MVC 中呈现 DropDown,您需要 2 个属性:
<%= Html.DropDownList(
"selectedProductType",
ViewData["productType"] as SelectList,
"defaultValue"
) %>
在您的控制器操作中,您可以设置这两个属性:
ViewData["selectedProductType"] = "abc";
ViewData["productType"] = new SelectList(myDropDownList);
这假设您value="abc"
的产品类型下拉列表中已经有一个元素。然后将自动预选该值。
我会向您推荐一种替代方法来呈现下拉列表。它包括摆脱视图数据和引入视图模型以及使用强类型版本的助手:
public class ProductViewModel
{
public string SelectedProductType { get; set; }
public IEnumerable<SelectListItem> ProductTypes { get; set; }
}
然后您将拥有一个控制器操作,它将填充此视图模型并将其传递给视图:
public ActionResult SomeAction()
{
var model = new ProductViewModel();
// preselected an element with value = "type2"
model.SelectedProductType = "type2";
// bind the available product types
model.ProductTypes = new SelectList(
// Obviously those could come from a database or something
new[] {
new { Value = "type1", Text = "product type 1" },
new { Value = "type2", Text = "product type 2" },
new { Value = "type3", Text = "product type 3" },
new { Value = "type4", Text = "product type 4" },
},
"Value",
"Text"
);
// pass the view model to the view
return View(model);
}
最后在您的强类型视图中:
<%= Html.DropDownListFor(
x => x.SelectedProductType,
Model.ProductTypes,
"defaultValue"
) %>