我有一个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)
这是上述答案的补充。这就是我要做的。
视图模型在那里代表您的数据。因此,对于一个下拉列表,我将具有以下内容:
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)
妳去
归档时间: |
|
查看次数: |
54758 次 |
最近记录: |