0

我已经搜索了几个小时,但找不到我正在寻找的答案。我有以下内容:

(存储库.cs)

public class AppRespository
{
    private DataContext db = new DataContext();

    public IEnumerable<SelectListItem> LoadStates()
    {
        var query = from d in db.States.ToList()
                    select new SelectListItem
                    {
                        Value = d.StateID.ToString(),
                        Text = d.State.ToString()
                    };
        return query;
    }
}

数据上下文.cs

public class DataContext : DbContext
{
    public DbSet<States> States { get; set; }
}

视图模型 (States.cs)

public class States
{
    [Key]
    public int StateID { get; set; }
    public IEnumerable<SelectListItem> State { get; set; }
}

控制器 (ApplicantController.cs)

// GET: /Applicant/

    public ActionResult Index()
    {
        AppRespository repo = new AppRespository();
        States viewModel = new States();
        viewModel.State = repo.LoadStates();
        return View(viewModel);
    }

看法:

@Html.DropDownListFor(model=>model.StateID, Model.State, "select")

为什么在调试我的应用程序时,我的存储库类的这一行为空?

Text = d.State.ToString(),

State 始终为 null,而 StateID 始终被设置。在只使用我的模型和控制器之前,我已经成功加载了这个下拉列表,但我喜欢这种模式。我是 ASP MVC 的中级人员,所以我可能遗漏了一些东西。

任何帮助表示赞赏。

4

3 回答 3

0

试试这个

@Html.DropDownListFor(n => n.StateID, 
                     new SelectList(State, "Value", "Text"))
于 2013-08-15T19:28:17.493 回答
0

尝试更改您的查询。代替:

public IEnumerable<SelectListItem> LoadStates()
{
    var query = from d in db.States.ToList()
                select new SelectListItem
                {
                    Value = d.StateID.ToString(),
                    Text = d.State.ToString()
                };
    return query;
}

拥有这个:

public IEnumerable<SelectListItem> LoadStates()
{
    var query = from d in db.States
                select new
                {
                    StateID = d.StateID,
                    State = d.State
                };
    var result = from q in query.ToList()
                 select new SelectedListItem
                 {
                     Value = d.StateID.ToString(),
                     Text = d.State.ToString()
                 }

    return result;
}

查询的第一部分设置了一个查询,以从数据库中获取数据的存储方式。它使用具有 2 个属性的匿名类:StateIDState.

一旦查询准备好,我们调用query.ToList(),它实际运行查询并获取数据,然后创建一个匿名类对象的列表。

现在我们可以从列表中选择并将匿名对象中的数据转换为SelectedListItemusing.ToString()或任何其他 .NET 方法。

于 2013-08-15T19:31:56.303 回答
0

看起来你需要在这里移动一些东西。我正在对您想要实现的目标做出一些假设,但是

(存储库.cs)

public class AppRespository
{
    private DataContext db = new DataContext();

    public IEnumerable<SelectListItem> LoadStates()
    {
        var query = from d in db.States.ToList()
                    select new SelectListItem
                    {
                        Value = d.StateID.ToString(),
                        Text = d.State
                    };
        return query;
    }
}

数据库上下文

public class DataContext : DbContext
{
    public DbSet<StateEntity> States { get; set; }
}

国家实体

public class StateEntity
{
    [Key]
    public int StateID { get; set; }
    public string State { get; set; }
}

视图模型

public class StateModel
{
    public IEnumerable<SelectListItem> States {get; set;}
}

控制器动作

// GET: /申请人/

public ActionResult Index()
{
    AppRespository repo = new AppRespository();
    StateModel viewModel = new StateModel();
    viewModel.States = repo.LoadStates();
    return View(viewModel);
}

希望这可以帮助您顺利完成任务。我假设您只想使用 StateEntity 加载一个 int / string 对列表

于 2013-08-15T22:29:37.743 回答