使用默认值从SelectList创建DropDownListFor

P.B*_*key 7 c# asp.net-mvc-4

我有一个dropdownlistfor:

 @Html.DropDownListFor(model => model.Item.Item.Status, new SelectList(@Model.AllStatus, "id", "Description"), new { id = "statusDropdown" })
 @Html.ValidationMessageFor(model => model.Item.Item.Status)
Run Code Online (Sandbox Code Playgroud)

HTML输出:

<select id="statusDropdown" class="valid" name="Item.Item.Status" data-val-required="The Status field is required." data-val-number="The field Status must be a number." data-val="true">
<option value="2">Completed by Admin</option>
<option value="3">General Error</option>
<option value="4">New</option>
</select>
Run Code Online (Sandbox Code Playgroud)

如何更新此代码以设置默认选定选项?例如

<option value="4" selected>New</option>

我试过了:

 @Html.DropDownListFor(model => model.Item.Item.Status, new SelectList(@Model.AllStatus, "id", "Description",@Model.SelectedStatusIndex), new { id = "statusDropdown" })
Run Code Online (Sandbox Code Playgroud)

@Model.SelectedStatusIndex 值为4,但不会将默认选项更改为"新建".

我也尝试过:

@Html.DropDownListFor(model => model.SelectedStatusIndex, new SelectList(@Model.AllStatus, "id", "Description"), new { id = "statusDropdown" })
@Html.ValidationMessageFor(model => model.Item.Item.Status)
Run Code Online (Sandbox Code Playgroud)

这将选择默认选项"新建",但model.Item.Item.Status不会通过HTTP POST下拉列表设置.

其他细节:

model.Item.Item.Status是一个int. @Model.AllStatus是一个列出所有可用状态选项的SQL表.

thm*_*shd 14

这里那里已经存在一些讨论.其中一个问题可能是使用string与键值不同的类型.我曾在过去类似的问题,我知道,我解决它像这样 -明确设置了Selected准备当列表(在你的情况下,财产AlLStatus).

对于你的情况(在控制器动作中)意味着:

IEnumerable<SelectListItem> selectList = 
from s in allStatus // where ever you get this from, database etc.
select new SelectListItem
{
    Selected = (s.id == model.Item.Item.Status),
    Text = cs.Description,
    Value = s.id.ToString()
};
model.AllStatus = selectList;
Run Code Online (Sandbox Code Playgroud)


Bre*_*ogt 5

这是上述答案的补充。这就是我要做的。

视图模型在那里代表您的数据。因此,对于一个下拉列表,我将具有以下内容:

public class MyViewModel
{
     public int StatusId { get; set; }

     public IEnumerable<Status> Statuses { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

状态类如下所示:

public class Status
{
     public int Id { get; set; }

     public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器用于处理视图的操作方法:

public class MyController
{
     private readonly IStatusService statusService;

     public MyController(IStatusService statusService)
     {
          this.statusService = statusService;
     }

     public ActionResult MyActionMethod()
     {
          MyViewModel viewModel = new MyViewModel
          {
               Statuses = statusService.GetAll(),
               StatusId = 4 // Set the default value
          };

          return View(viewModel);
     }
}
Run Code Online (Sandbox Code Playgroud)

该视图将如下所示:

@model MyProject.ViewModels.MyViewModel

@Html.DropDownListFor(
     x => x.StatusId,
     new SelectList(Model.Statuses, "Id", "Description", Model.StatusId),
     "-- Select --"
)
@Html.ValidationMessageFor(x => x.StatusId)
Run Code Online (Sandbox Code Playgroud)

妳去