我有一个带有一些基本票证信息的票证模型。
我现在要做的是希望能够为每个故障单分配代理。
对于代理,我想使用我已经拥有的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>
但没有任何效果。当我编辑故障单时,代理下拉列表会显示一些堰角色,如图所示。我希望这是一个用户名列表。
DEBUG
@nurdyguy在您执行ViewBag.Agents = new SelectList(db.Users)
的控制器的行上设置调试停止;
这就是我得到的:
答案 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");
参考文献: