asp.net mvc-Razor和C#ViewData被用作选择列表.页面加载时,所选项目会发生更改
本文关键字:选项 项目 加载 C#ViewData mvc-Razor net 列表 选择 asp | 更新日期: 2023-09-27 18:00:35
我正在使用以下C#代码创建一个选择列表。
ViewData["companyList"] = new SelectList(
db.companies.Where(ai => true), "id", "companyName", domain.companyId
);
当我遍历代码时,ViewData上下文选择了正确的项(列表中的secod项)。
剃须刀有以下功能:
<div class="editor-label">
@Html.LabelFor(model => model.companyId)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.companyId, (IEnumerable<SelectListItem>)ViewData["companyList"], new { @class = "apex-select-list" })
@Html.ValidationMessageFor(model => model.companyId)
</div>
public partial class company
{
public int id { get; set; }
public string companyName { get; set; }
public string description { get; set; }
public short status { get; set; }
public int location911Id { get; set; }
public int timeoffsetid { get; set; }
public int creatorId { get; set; }
public int modifiedById { get; set; }
public System.DateTime created { get; set; }
public System.DateTime updated { get; set; }
}
public partial class domain
{
public int id { get; set; }
public string domainName { get; set; }
public bool enabled { get; set; }
public int companyId { get; set; }
public int creatorId { get; set; }
public int modifiedById { get; set; }
public System.DateTime created { get; set; }
public System.DateTime updated { get; set; }
}
当页面显示时,它总是默认为所选的第一个项目。我已经查看了页面源代码,并清楚地将第一个项目选择为已选项目,而不是调试器中显示为已选的项目。
我已经使用这个结构很多次了,从来没有遇到过问题。
这怎么会发生?
ViewData["companyList"] = new SelectList(
db.companies.AsEnumerable(), "companyId", "companyName", domain.companyId
);
看起来您使用了错误的dataValueField参数,因为公司可能没有名为id
的列,但有名为companyId
的列。
您的代码看起来很好,应该可以这样工作,但如果显示默认值,它可能用于:
1) 某些javascript正在将该值更改为默认值。
2) domain.companyId中的值不属于列表
db.companies.Where(ai => true)