C# 模板视图模型';在视图中渲染时,s SelectList属性被神奇地选中
我有一个主细节视图,允许用户通过jQuery DOM操作0动态添加子记录,然后将整个主细节表单发布回我的C# 模板视图模型';在视图中渲染时,s SelectList属性被神奇地选中,c#,jquery,asp.net-mvc,entity-framework,automapper,C#,Jquery,Asp.net Mvc,Entity Framework,Automapper,我有一个主细节视图,允许用户通过jQuery DOM操作0动态添加子记录,然后将整个主细节表单发布回我的HttpPostEdit方法。我的主视图模型如下所示: public class FooViewModel { // Other properties skipped for brevity public ICollection<BarViewModel> Bars { get; set; } } 在调试器中,我确保当我的编辑操作方法触发GET请求时,BazSel
HttpPost
Edit
方法。我的主视图模型如下所示:
public class FooViewModel
{
// Other properties skipped for brevity
public ICollection<BarViewModel> Bars { get; set; }
}
在调试器中,我确保当我的编辑
操作方法触发GET请求时,BazSelectList
中的所有SelectListItem
都具有Selected
属性值false
。然后呈现我的视图:
@model FooViewModel
@using (Html.BeginForm())
{
@*Other properties skipped for brevity*@
@*Model binding magic here, editor template rendered for each BarViewModel*@
@Html.EditorFor(m => m.Bars)
<button type="button" class="btn btn-default">Add Bar</button>
}
@* BarViewModel template here *@
@Html.Partial("EditorTemplates/BarViewModel",
(BarViewModel)ViewBag.BarTemplateViewModel)
当视图呈现时,
ViewBag.BarTemplateViewModel.BazSelectList
在不应该选择的时候选择了一个SelectListItem
,因为我正在将一个空的BarViewModel
实例传递给ViewBag
。这一点已得到确认,因为当我单击“添加栏”按钮时,我可以看到BazSelectList
被预先选中。预期的行为是有一个未选择的下拉列表。有人能帮忙吗?最终我找到了解决办法。将IEnumerable
包装为调用SelectList
构造函数解决了我的问题,即更改此选项:
@Html.DropDownListFor(m => m.BazId,
Model.BazSelectList,
string.Empty,
new { @class = "form-control" })
到
您没有包含足够的代码来理解。您在哪里以及如何生成下拉列表,以及什么是
GetBazSelectList()
@StephenMuecke,我认为它与GetBazSelectList
方法无关,由于调试器显示在控制器中设置断点时未选择任何SelectListItem
s…但是,当我在Edit
视图中设置断点时,选择了其中一个选项。您是否使用强类型帮助器?您绑定的属性值是否与其中一个SelectListItem
的值匹配?为什么您认为预期的行为是有一个未选择的下拉列表?您是否使用了接受选项标签的重载?
?我希望模板的下拉列表不会被选中,因为我将空视图模型传递给了视图包。但是我当然希望FooViewModel.bar
的下拉列表中应该填充相应的所选值您确定GetBazSelectList
生成的选项中没有一个值为0
?使用您的代码进行测试(仅使用Html.Partial()
和BazSelectList
的一些伪值),如果SelectListItems
中没有Value=“0”
,则选择“empty”选项。
@model FooViewModel
@using (Html.BeginForm())
{
@*Other properties skipped for brevity*@
@*Model binding magic here, editor template rendered for each BarViewModel*@
@Html.EditorFor(m => m.Bars)
<button type="button" class="btn btn-default">Add Bar</button>
}
@* BarViewModel template here *@
@Html.Partial("EditorTemplates/BarViewModel",
(BarViewModel)ViewBag.BarTemplateViewModel)
@model BarViewModel
<div class="form-group">
@Html.LabelFor(m => m.BazId, new { @class = "col-md-5 control-label" })
<div class="col-sm-6">
@Html.DropDownListFor(m => m.BazId,
Model.BazSelectList,
string.Empty,
new { @class = "form-control" })
</div>
</div>
@Html.DropDownListFor(m => m.BazId,
Model.BazSelectList,
string.Empty,
new { @class = "form-control" })
@Html.DropDownListFor(m => m.BazId,
new SelectList(Model.BazSelectList, "Value", "Text"),
string.Empty,
new { @class = "form-control" })