无法将ASP.Net Identity用户列表添加并显示到对象模型(MVC5)

时间:2017-07-05 15:48:40

标签: asp.net-mvc asp.net-mvc-5

我有一个带有一些基本票证信息的票证模型。

我现在要做的是希望能够为每个故障单分配代理。

对于代理,我想使用我已经拥有的ASP.Net Identity Users。

我想将名为AgentName和AgentID的属性添加到此Ticket模型中。

在我的索引视图中,我想看到分配给AgentName属性的单个代理名称,当我编辑故障单时,我希望有一个所有可用ASP.Net标识用户(代理名称)的下拉列表,以便我可以将票证分配给。

我希望还能够使用AgentID向特定代理查询所有已分配的故障单,因此我需要使用AgentID将每个故障单链接到代理。

如何通过代码实现这一目标?任何帮助表示赞赏。

到目前为止,我有这个:

   Public class Ticket
{
    public int Id { get; set; }
    Display(Name = "Ticket comes from")]
    public string Source { get; set; }
}

在我的票证中编辑(int id)HttpGet方法我使用以下代码获取票证信息。

//HttpGet
public ActionResult Edit(int id)
{
    Models.Ticket model = db.Ticket
        .Include("Source")
        .SingleOrDefault(m => m.Id == id);

    if (model == null)
    {
        return new HttpNotFoundResult();
    }

    return View(model);
}

我尝试了什么

我已尝试将我的Ticket模型更改为此类

Public class Ticket
{
    public int Id { get; set; }
    Display(Name = "Ticket comes from")]
    public string Source { get; set; }
    //....

    // Now I want to have a property called AgentName and AgentID
    //...something like this
    public string AgentName {get; set;} //***I want this to display the User Name of the User in Index View page. But, I also want a dropdown list of user when I am in Edit mode so that I can change the AssignedToUser to have different user.
    public string AgentID {get; set;} 
}

要获得所有ASP.Net Identity User(代理商),我有类似的内容:

ViewBag.Agents = new SelectList(db.Users);

要在编辑模式下显示为下拉列表,我可以这样:

            <div class="form-group">
                @Html.LabelFor(model => model.AgentName, new { @class = "col-sm-4 control-label" })
                <div class="col-sm-8">
                    @Html.DropDownList("Agents", ViewBag.Agents as SelectList, String.Empty, new { @class = "form-control" })
                </div>
            </div>

但没有任何效果。当我编辑故障单时,代理下拉列表会显示一些堰角色,如图所示。我希望这是一个用户名列表。 enter image description here

DEBUG

@nurdyguy在您执行ViewBag.Agents = new SelectList(db.Users)的控制器的行上设置调试停止; 这就是我得到的:

enter image description here

1 个答案:

答案 0 :(得分:1)

这不是实体框架问题,这只是DropDown为其提供复杂对象时的默认行为。尝试保持您的View代码相同,并在Controller中尝试以下内容:

// change Name to the display property you want to show up in the dropdown
//                               source,    value,  display
ViewBag.Agents = new SelectList( db.Users,  "Id",   "Name");

参考文献:

DropDownList Property to display

ASP.NET MVC Html.DropDownList SelectedValue