首页 文章

如何通过在MVC中登录用户来过滤DropDown列表

提问于
浏览
0

如何过滤下拉列表,我需要记录登录用户的名称 .

在控制器中我有这个代码:

var agentBR = (Session["aID"]);
    ViewBag.AgentID = new SelectList(db.tbl_agenti.Where(x => x.aID.Equals("agentBR")), "aID", "agent_ime");

但没有工作,会话ID确定,并在浏览器中我有这个错误:

DbComparisonExpression requires arguments with comparable types.

Description: 执行当前Web请求期间发生了未处理的异常 . 请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息 .

Exception Details: System.ArgumentException:DbComparisonExpression需要具有可比类型的参数 .

来源错误:

@ Html.LabelFor(model => model.AgentID,“AgentID”,htmlAttributes:new {@class =“control-label col-md-2”})@ Html.DropDownList(“AgentID”,null,htmlAttributes:new {@class =“form-control”})@ Html.ValidationMessageFor(model => model.AgentID,“”,new {@class =“text-danger”})

1 回答

  • 0

    这部分代码在 Where 方法中

    x.aID.Equals("agentBR")
    

    尝试过滤 aID 属性值与 Equals 方法中传递的值匹配的记录 . 您提到aID是 int 类型,但是您将字符串 "agentBR" 传递给Equals方法进行比较,因此会出现类型不匹配错误 .

    你应该尝试传递相同的类型 .

    假设 Session["aID"] 中存储的值是有效的int32值,您可以将其读取为int变量并使用where子句中的值与 aID 属性进行比较,该属性具有相同的 int 类型 .

    int agentId=0;
    if(Session["aID"]!=null)
    {
       agentId = Convert.ToInt32(Session["aID"]);
    }
    var agents = new SelectList(db.tbl_agenti
                                   .Where(x => x.aID.Equals(agentId)), "aID", "agent_ime");
    ViewBag.AgentID  = agents;
    

相关问题