Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无法向对象模型(MVC5)添加和显示ASP.Net标识用户列表_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

Asp.net mvc 无法向对象模型(MVC5)添加和显示ASP.Net标识用户列表

Asp.net mvc 无法向对象模型(MVC5)添加和显示ASP.Net标识用户列表,asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,我有一个带有一些基本票证信息的票证模型 我现在想做的是,我希望能够为每张票指定代理 对于代理,我想使用我已经拥有的ASP.Net身份用户 我想将名为AgentName和AgentID的属性添加到此票证模型中 在我的索引视图中,我希望看到分配给AgentName属性的单个代理名称,并且在编辑票证时,我希望有一个所有可用ASP.Net标识用户(代理名称)的下拉列表,以便我可以将票证分配给 我还希望能够使用AgentID查询所有分配给特定代理的票证,因此我需要以某种方式将每个票证链接到使用AgentI

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

我现在想做的是,我希望能够为每张票指定代理

对于代理,我想使用我已经拥有的ASP.Net身份用户

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

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

我还希望能够使用AgentID查询所有分配给特定代理的票证,因此我需要以某种方式将每个票证链接到使用AgentID的代理

如何使用代码实现这一点?感谢您的帮助

到目前为止,我有:

   Public class Ticket
{
    public int Id { get; set; }
    Display(Name = "Ticket comes from")]
    public string Source { get; set; }
}
在我的票证编辑(intid)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);
}
我尝试过的

我试着把我的机票型号改成这样

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身份用户(代理),我有如下内容:

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>
要在编辑模式下显示为下拉列表,我有如下内容:

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>

@LabelFor(model=>model.AgentName,新的{@class=“col-sm-4控件标签”})
@DropDownList(“Agents”,ViewBag.Agents作为SelectList,String.Empty,new{@class=“form control”})
但一切都不起作用。当我编辑票据时,代理下拉列表会显示一些字符,如图所示。我希望这是一个用户名列表。

调试


@nurdyguy在控制器的线路上设置了一个调试停止,您可以在这里执行
ViewBag.Agents=new SelectList(db.Users)
; 这就是我得到的:


这不是实体框架问题,这只是当您为下拉列表提供复杂对象时的默认行为。尝试保持视图代码不变,并在控制器中尝试以下操作:

// 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");
参考资料:


感觉像是一个EntityFramework问题。您是否进行了数据迁移?我确实使用迁移来更新数据库,因为我已更改了模型。我不确定下拉列表实现是否正确。有什么想法吗?在控制器的线路上设置一个调试停止点,您可以在那里执行
ViewBag.Agents=new SelectList(db.Users)
并查看您传递的内容。EF identity通常不希望您获得所有用户,因为这可能是一个庞大的列表。您可能需要设置自己的查询以获取所有用户。我还建议为此使用视图模型,而不是将其集中到viewbag中,但首先要做的事情。您看到的文本是因为对象具有正在调用的默认
.ToString()
方法。尝试将列表本身加载到viewbag中,然后在视图中创建下拉列表。或者,对SelectList使用其中一个重载,只加载所需的值,谢谢。提交时如何将所选用户保存到我的票证?这取决于您如何设置票证模型。您可能希望对用户表的主键使用外键,只需将
Ticket.Agent_Id
字段设置为下拉列表中的所选项目。