Razor和C#ViewData用作选择列表。页面加载时,所选项目会更改

时间:2015-06-30 17:46:31

标签: c# asp.net-mvc razor

我使用以下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; }
}

显示页面时,它始终默认为所选的第一个项目。我查看了页面源代码,显然是选择了第一项而不是调试器中显示的选项。

我多次使用过这个结构,从来没有遇到过问题。

这怎么可能发生?

2 个答案:

答案 0 :(得分:0)

ViewData["companyList"] = new SelectList(
    db.companies.AsEnumerable(), "companyId", "companyName", domain.companyId
);

看起来你有错误的dataValueField参数,因为公司可能没有名为id的列但是有一个名为companyId的列。

答案 1 :(得分:0)

您的代码看起来很好并且应该以这种方式工作,但如果显示默认值,则可以是:

1)有些javascript正在将值更改为默认值。

2)domain.companyId中的值不属于列表

 db.companies.Where(ai => true)