为什么我得到这个错误。它应该检查用户是否被允许访问视图[重复]。

问题描述 投票:-1回答:1

说明:在执行当前网络请求时发生了一个未处理的异常。在执行当前网络请求时发生了一个未处理的异常。请查看堆栈跟踪,以了解更多关于该错误的信息以及它在代码中的起源。

异常详情。System.InvalidOperationException: 序列中没有元素

RolesCovidDbEntities db = new RolesCovidDbEntities();
        var dataItem = db.Logins.Where(x => x.Username == model.Username && x.Password == model.Password).First();        // this is where the error occurs 
        if (dataItem != null)

        {
            FormsAuthentication.SetAuthCookie(dataItem.Username, false);
           if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
               && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
           {
               return Redirect(returnUrl);
           }
           else
            {
                return RedirectToAction("Index");
            }
c# database model-view-controller roles
1个回答
2
投票

原因:你正在使用 First() 如果获取的列表为空,它将抛出异常。可以考虑使用 FirstOrDefault() 倒不如说 dataItem 将被设置为 null.

正如已经评论过的,你不需要单独使用 Where 自从 FirstOrDefault() 也接受一个谓词,因此,你可以在这里传递相同的谓词,如

var dataItem = db.Logins
     .FirstOrDefault(x => x.Username == model.Username && x.Password == model.Password); 
© www.soinside.com 2019 - 2024. All rights reserved.