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

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

我的选择列表然后显示如下:
<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>

但出于某种原因,英国仍然被选中,但我希望选择“请选择一个国家”。

有谁知道我怎么能做到这一点?

编辑

我已经更新了我的代码,因为功能略有变化,但似乎仍然遇到了这个问题。这就是我的看法:
@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")
1 是我想要选择的 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 中), 当您持有 SelectList 的 ViewBag 属性时,有一个“小错误”(或未察觉的行为),与您在其中放置 所选值的属性相同。为避免这种情况,只需在命名包含项目列表的属性时使用另一个名称。

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

View 模型:
public class MyViewModel{
   public int SelectedOrderId {get; set;}
   public SelectList OrderTemplates {get; set;}

   // Other properties you need in your view
}

Controller :
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")

关于asp.net-mvc - Html.DropdownListFor 未设置选定值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19476530/

10-14 07:21