如何过滤下拉列表,我需要取登录用户的名称。
在控制器中,我有以下代码:
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;