gpt4 book ai didi

html - ASP.Net MVC SelectList 不是 'Selecting' 正确的项目

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:56 25 4
gpt4 key购买 nike

有人要求我查看某些 ASP.Net MVC 代码中的错误,并且(对我而言)SelectList 有一个非常奇怪的问题。

controller生成items的代码(一个返回SelectList的方法,一共有5个)。然后将每个 SelectList 保存到 ViewData 集合中。

List<SelectListItem> items = new List<SelectListItem>();
string yesText = "Yes";
string noText = "No";
if (ci.LCID.Equals((int)LanguageCodes.FRANCE))
{
yesText = "Oui";
noText = "Non";
}

SelectListItem yesItem = new SelectListItem();
yesItem.Text = yesText;
yesItem.Value = ((int)MarketingBy.Yes).ToString();
yesItem.Selected = selectedValue != null && selectedValue.Equals(int.Parse(yesItem.Value));

SelectListItem noItem = new SelectListItem();
noItem.Text = noText;
noItem.Value = ((int)MarketingBy.No).ToString();
noItem.Selected = selectedValue != null && selectedValue.Equals(int.Parse(noItem.Value));

items.Add(yesItem);
items.Add(noItem);

return new SelectList(items, "Value", "Text", yesItem.Selected ? yesItem.Value : noItem.Value);

在创建时快速“快速观察”表明一切正常: Select List generated

在渲染 View 时,值看起来仍然正常。但是,当加载 View 时,列表中的第一项始终处于选中状态。生成的 HTML 是:

<tr>
<td>Fax</td>
<td>
<select id="MarketingByFax" name="MarketingByFax">
<option value="134300002">Yes</option>
<option value="134300001">No</option>
</select>
</td>
</tr>

(为清楚起见省略了其他值)。

有什么想法吗?或者研究途径?作者坚持认为这是“直到上周”才有效(我不知道是哪种情况)。

编辑: View 代码 -

<td><%: Html.DropDownList("MarketingByFax", (SelectList)ViewData["MarketingByFaxList"])%></td>

最佳答案

这段代码在每个可以想象的方面看起来都很糟糕(当然是恕我直言)。我不知道为什么它不起作用,我也不想知道。我所能做的就是建议您如何改进它(如果您正在寻找有关为什么您的代码不起作用的解决方案,您可以停止阅读这篇文章,因为我不知道)。

所以第一个改进是摆脱任何 ViewData 并引入一个 View 模型:

public class MyViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}

然后我会有一个 Controller Action 来填充这个 View 模型:

public ActionResult Index()
{
var model = new MyViewModel
{
// I want to preselect the second value
SelectedValue = "No",
Items = new[]
{
new SelectListItem { Value = "Yes", Text = "yeap !" },
new SelectListItem { Value = "No", Text = "nope !" },
}
};
return View(model);
}

在我的强类型 View 中,我会简单地将助手绑定(bind)到 View 模型:

<%= Html.DropDownListFor(
x => x.SelectedValue,
new SelectList(Model.Items, "Value", "Text")
) %>

此外,如果您想使用某些枚举类型,您可能会发现 following extension method有用。

看到它有多简单了吗?不再需要使用 ViewData 进行丑陋的转换,不再需要定义任何列表并指定一些复杂的条件,...

备注:再说一遍,这些只是我的 2¢,如果愿意,您可以使用 ViewData 继续战斗。

关于html - ASP.Net MVC SelectList 不是 'Selecting' 正确的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362010/

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