Html.DropdownListFor选定的值没有被设置

如何设置Html.DropDownListFor的选定值? 我一直在网上看,看到它可以通过使用第四个参数,如下所示:

@Html.DropDownListFor(m => m, new SelectList(Model, "Code", "Name", 0), "Please select a country") 

我的select列表显示如下:

 <select id="ShipFromCountries" name="ShipFromCountries"> <option value="">Please select a country</option> <option value="GB">United Kingdom</option> <option value="US">United States</option> ... </select> 

但由于某些原因英国仍然被选中,但我想要“请select一个国家”来select。

任何人都知道我可以做到这一点?

编辑

我已经更新了我的代码,因为function上有轻微的变化,但似乎仍然遇到了这个问题。 这是我的看法:

 @Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template") 

1是我想要select的option的ID,我也尝试了option的文本,但也没有工作。

有任何想法吗?

你的代码有一些概念问题:

首先

 @Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template") 

使用DropDownListFor时,第一个参数是提交表单后所选值存储的属性。 所以,在你的情况下,你应该有一个SelectedOrderId作为你的模型或类似的东西的一部分,以便以这种方式使用它:

 @Html.DropDownListFor(n => n.SelectedOrderId, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template") 

其次

除了使用ViewBag,这是没有错,但有更好的方法(把这些信息放在ViewModel中), 当你的ViewBag属性,你持有SelectList的时候会有一个“小错误”(或者一个不确定的行为)与放置所选值的属性名称相同 。 为避免这种情况,只需在命名包含项目列表的属性时使用其他名称。

我会使用一些代码,如果我是你要避免这个问题,并写出更好的MVC代码:

视图模型:

 public class MyViewModel{ public int SelectedOrderId {get; set;} public SelectList OrderTemplates {get; set;} // Other properties you need in your view } 

控制器:

 public ActionResult MyAction(){ var model = new MyViewModel(); model.OrderTemplates = new SelectList(db.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1); //Other initialization code return View(model); } 

在你的View中:

 @Html.DropDownListFor(n => n.SelectedOrderId, Model.OrderTemplates, "Please select an order template") 

对我而言,这样做并不是那么有效:

控制器:

 int selectedId = 1; ViewBag.ItemsSelect = new SelectList(db.Items), "ItemId", "ItemName",selectedId); 

视图:

 @Html.DropDownListFor(m => m.ItemId,(SelectList)ViewBag.ItemsSelect) 

JQuery的:

 $("document").ready(function () { $('#ItemId').val('@Model.ItemId'); }); 

当你传递一个像这样的对象:

 new SelectList(Model, "Code", "Name", 0) 

你是说,源( Model )和密钥( "Code" )文本( "Name" )和选定的值0 。 可能你的Code属性的源Code没有0值,所以,html helper将select第一个元素。 要将真正的选定值传递给此控件。

确保您在分配之前修剪选定的值。

//模型

 public class SelectType { public string Text { get; set; } public string Value { get; set; } } 

//控制器

 var types = new List<SelectType>(); types.Add(new SelectType() { Value = 0, Text = "Select a Type" }); types.Add(new SelectType() { Value = 1, Text = "Family Trust" }); types.Add(new SelectType() { Value = 2, Text = "Unit Trust"}); ViewBag.PartialTypes = types; 

//视图

 @Html.DropDownListFor(m => m.PartialType, new SelectList(ViewBag.PartialTypes, "Value", "Text"), new { id = "Type" }) 

如果您知道视图中的内容,您也可以从Controller中设置默认值,然后将其设置到view / cshtml文件中。 不需要从HTML端设置默认值。

在控制器文件中。

 commission.TypeofCommission = 1; return View(commission); 

在.cshtml文件中。

 @Html.DropDownListFor(row => row.TypeofCommission, new SelectList(Model.commissionTypeModelList, "type", "typeName"), "--Select--") 

你应该忘记课程

的SelectList

在你的控制器中使用这个

 var customerTypes = new[] { new SelectListItem(){Value = "all", Text= "All"}, new SelectListItem(){Value = "business", Text= "Business"}, new SelectListItem(){Value = "private", Text= "Private"}, }; 

select值:

 var selectedCustomerType = customerTypes.FirstOrDefault(d => d.Value == "private"); if (selectedCustomerType != null) selectedCustomerType.Selected = true; 

将列表添加到ViewData中:

 ViewBag.CustomerTypes = customerTypes; 

在你的View中使用这个

 @Html.DropDownList("SectionType", (SelectListItem[])ViewBag.CustomerTypes) 

更多信息,请访问: http : //www.asp.net/mvc/overview/older-versions/working-with-the-dropdownlist-box-and-jquery/using-the-dropdownlist-helper-with-aspnet-mvc

添加控制器部分

  ViewBag.Orders= new SelectList(db.Orders, "Id", "business", paramid); 

添加Html部分

  @Html.DropDownList("Orders", null) 

一个简单的方法

对于我一般的解决scheme

 @{ var selectedCity = Model.Cities.Where(k => k.Id == Model.Addres.CityId).FirstOrDefault(); if (selectedCity != null) { @Html.DropDownListFor(model => model.Addres.CityId, new SelectList(Model.Cities, "Id", "Name", selectedCity.Id), new { @class = "form-control" }) } else { @Html.DropDownListFor(model => model.Cities, new SelectList(Model.Cities, "Id", "Name", "1"), new { @class = "form-control" }) } } 

Linq下拉空项目,选定项目(作品100%)
(强types,错误最小的机会)任何模型更改都会反映在绑定中

调节器

 public ActionResult ManageSurveyGroup() { tbl_Survey sur = new tbl_Survey(); sur.Survey_Est = "3"; return View(sur); } 

视图

  @{ //Step One : Getting all the list var CompEstdList = (from ComType in db.tbl_CompEstdt orderby ComType.Comp_EstdYr select ComType).ToList(); //Step Two : Adding a no Value item ** CompEstdList.Insert(0, new eDurar.Models.tbl_CompEstdt { Comp_Estdid = 0, Comp_EstdYr = "--Select Company Type--" }); //Step Three : Setting selected Value if value is present var selListEstd= CompEstdList.Select(s => new SelectListItem { Text = s.Comp_EstdYr, Value = s.Comp_Estdid.ToString() }); } @Html.DropDownListFor(model => model.Survey_Est, selListEstd) @Html.ValidationMessageFor(model => model.Survey_Est) 

这种绑定数据的方法也是可能的

 var selList = CompTypeList.Select(s => new SelectListItem { Text = s.CompTyp_Name, Value = s.CompTyp_Id.ToString(), Selected = s.CompTyp_Id == 3 ? true : false });