繁体   English   中英

一键获取值并绑定以查看模型

[英]Get Values With One Select and Bind To View Model

我正在使用Web服务来获取活动目录用户并将其值绑定到视图模型。 但是Web服务是如此之慢,因此每个查询花费的时间都是一个接一个。 我可以仅通过一个查询获取值并将其绑定到视图模型吗?

我的代码是这样的:

    public ActionResult EditUser(string id)
    {
        AdVM model = new AdVM();

        Security s = new Security();
        s.Cn = "Users";
        ADLogin a = new ADLogin();

        model.Username = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x=>x.UserName).FirstOrDefault();
        model.DisplayName = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.DisplayName).FirstOrDefault();
        model.FirstName = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.FirstName).FirstOrDefault();
        model.LastName = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.LastName).FirstOrDefault();

        model.Title = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.Title).FirstOrDefault();
        model.Department = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.Department).FirstOrDefault();
        model.Division = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x => x.Division).FirstOrDefault();

        return PartialView("_PartialEdit", model);
    }

您应该尝试这样:

AdVM model = a.ADGetAllUser(s).Where(x => x.UserName == id).Select(x=> new AdVM() {Username = x.UserName, DisplayName = x.DisplayName... other fileds}).SingleOrDefult();

你可以试试这个

var user = a.ADGetAllUser(s).Where(x => x.UserName == id).FirstOrDefault();

只需删除Select语句。

通常,击中AD并不是最快的事情。 我会将用户缓存到静态变量中,并经常刷新它。 然后,您可以只检索GET所需的单个用户。

另外,您可以按照Florim的建议更改您的方法以一次全部返回它们。 您不需要方法中的id参数,并且极有可能需要对视图进行重做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM