如何在MVC中按登录用户过滤下拉列表



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

在控制器中,我有以下代码:

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

但不起作用,会话ID正常,并且在浏览器中,我有此错误:

DbComparisonExpression 需要具有类似类型的参数。

说明:执行当前 Web 请求期间发生未经处理的异常。请查看堆栈跟踪以获取更多信息 有关错误及其在代码中起源位置的信息。

异常详细信息: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" })

Where 方法中的这部分代码

x.aID.Equals("agentBR")

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

您应该尝试传递相同的类型。

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

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;

最新更新