通过一个选择和绑定来获取值以查看模型

时间:2015-12-29 22:20:09

标签: c# asp.net-mvc linq web-services viewmodel

我正在使用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);
    }

3 个答案:

答案 0 :(得分:1)

你应该试试这个:

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

答案 1 :(得分:0)

你可以试试这个

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

只需删除Select语句。

答案 2 :(得分:0)

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

或者,你可以改变你的方法,按照Florim的建议一次性返回它们。您在方法中不需要id参数,并且最有可能需要重新设计视图。