C# Html.DropDownListFor()-如何设置强类型视图的默认选定值?
使用ASP.NET MVC 3,我一直在为强类型视图使用help Html.DropDownListFor()函数设置下拉列表的选定值 模型的代码如下所示:C# Html.DropDownListFor()-如何设置强类型视图的默认选定值?,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,使用ASP.NET MVC 3,我一直在为强类型视图使用help Html.DropDownListFor()函数设置下拉列表的选定值 模型的代码如下所示: public class ResourceView { ... public Language Language { get; set; } } public class Language { public string DisplayName { get; private set; } public
public class ResourceView
{
...
public Language Language { get; set; }
}
public class Language
{
public string DisplayName { get; private set; }
public string Code { get; private set; }
public override string ToString() { return DisplayName; }
}
在视图中:
@Html.DropDownListFor(model => model.Language,
new SelectList(ViewBag.AllPossibleLanguages,
"Code", "DisplayName", Model.Language.Code))
有一些变通方法,例如使用
@Html.DropDownList("LanguageCode",
new SelectList(ViewBag.PossibleLanguages,
"Code", "DisplayName", Model.Language.Code))
奇怪的是,如果将第一个参数设置为“Language”(与模型中属性的名称相同),则上面的代码将不起作用
我也可以这样做
@Html.DropDownListFor(model => model.Language,
new SelectList(ViewBag.AllPossibleLanguages))
这也适用于适当的选定值,但是只会显示Language类的ToString()值,并且不会设置我希望在选项标记中使用的实际语言代码,这并不奇怪,因为没有任何标识代码字段应用作值属性
我还可以使用jquery事件处理程序来解决这个问题,该处理程序随后选择适当的值。然而,我很好奇为什么这不能像预期的那样工作,如果可能的话,我想正确地解决它。Html的第一个参数。DropDownListFor是模型的属性,所选值将在发布时绑定到该属性。当您说
@Html.DropDownListFor(model=>model.Language)
时,默认绑定器将无法确定需要在语言类中绑定所选值的属性,而在下拉列表的情况下,该属性将始终是单个字符串或整数。出于同样的原因,@Html.DropDownList(“LanguageCode”)
也起作用
如果要更改行为,始终可以扩展默认模型绑定器
编辑:
你可以试试,我相信这会解决你的问题
@Html.DropDownListFor(model.Language.Code, new SelectList(ViewBag.AllPossibleLanguages))
这似乎有效:@Html.DropDownListFor(model=>model.Language.Code,new SelectList(ViewBag.possiblellanguages,“Code”,“DisplayName”))我认为只可能绑定到模型的直接属性,而不可能绑定到其关系的属性。但是仍然存在一个问题,它似乎自动创建一个名为“Language.Code”的表单参数名,我不知道如何在控制器中用“.”绑定表单参数。通过将语言作为参数解决了上述问题。显然,模型绑定器将处理参数name.TL内的时段;DR:这是
new SelectList(items,dataValueField,dataTextField,selectedValue)中的第四个参数