gpt4 book ai didi

c# - SelectList 中的 ASP.NET MVC 下拉列表

转载 作者:IT王子 更新时间:2023-10-29 03:59:44 24 4
gpt4 key购买 nike

我正在构建以下 SelectList在我的 Controller 中。

var u = new NewUser();

u.UserTypeOptions = new SelectList(new List<SelectListItem>
{
new SelectListItem { Selected = true, Text = string.Empty, Value = "-1"},
new SelectListItem { Selected = false, Text = "Homeowner", Value = ((int)UserType.Homeowner).ToString()},
new SelectListItem { Selected = false, Text = "Contractor", Value = ((int)UserType.Contractor).ToString()},
});

return u;

然后像这样在我的 View 中显示它:

@Html.DropDownListFor(m => m.UserType, Model.UserTypeOptions)

看起来我给了它一组有效的 SelectListItem s 应该是一个非常简单的下拉列表,而不是得到一个有效的 <option>列出具有良好值(value)和文本的列表,我明白了:

<select data-val="true" data-val-range="A user type must be selected." data-val-range-max="2" data-val-range-min="1" data-val-required="The UserType field is required." id="UserType" name="UserType" class="input-validation-error">
<option>System.Web.Mvc.SelectListItem</option>
<option>System.Web.Mvc.SelectListItem</option>
<option>System.Web.Mvc.SelectListItem</option>
</select>

什么给了?据我所知,这应该有效。

最佳答案

您缺少在 SelectList 本身中设置 TextValue 字段。这就是它对列表中的每个对象执行 .ToString() 的原因。您可能会认为,鉴于它是 SelectListItem 的列表,它应该足够聪明以检测到这一点……但事实并非如此。

u.UserTypeOptions = new SelectList(
new List<SelectListItem>
{
new SelectListItem { Selected = true, Text = string.Empty, Value = "-1"},
new SelectListItem { Selected = false, Text = "Homeowner", Value = ((int)UserType.Homeowner).ToString()},
new SelectListItem { Selected = false, Text = "Contractor", Value = ((int)UserType.Contractor).ToString()},
}, "Value" , "Text", 1);

顺便说一句,您可以使用任何类型的列表或数组...然后只需设置将充当文本和值的属性的名称。

我觉得这样比较好:

u.UserTypeOptions = new SelectList(
new List<SelectListItem>
{
new SelectListItem { Text = "Homeowner", Value = ((int)UserType.Homeowner).ToString()},
new SelectListItem { Text = "Contractor", Value = ((int)UserType.Contractor).ToString()},
}, "Value" , "Text");

我去掉了-1项,每一项的设置都选择了true/false。

那么,在你看来:

@Html.DropDownListFor(m => m.UserType, Model.UserTypeOptions, "Select one")

这样,如果您设置了“选择一个”项目并且没有将一个项目设置为在 SelectList 中选择,则 UserType 将为空(UserType需要是 int? )。

如果您需要将其中一个 SelectList 项设置为选中,您可以使用:

u.UserTypeOptions = new SelectList(options, "Value" , "Text", userIdToBeSelected);

正如其中一位用户在评论中解释的那样:当使用 DropDownListFor() 绑定(bind)到属性时,SelectList 构造函数的第四个选项将被忽略 - 它是决定选择什么的属性值。

关于c# - SelectList 中的 ASP.NET MVC 下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20242981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com