Страница входа с использованием шаблона репозитория LINQ Query. Ошибка получения - PullRequest
0 голосов
/ 20 октября 2019

Я использую шаблон хранилища. Когда я вхожу в систему, я получаю сообщение об ошибке:

"Ссылка на объект не установлена ​​для экземпляра объекта."

Все идеально, но я не знаю почемуэта ошибка показывает Может кто-нибудь сказать мне, где я не прав. LoginViewModel и модель пользователя одинаковы, и я использую базу данных в первую очередь.

Страница входа в систему

  public ActionResult Login(LoginViewModel loginModel )
        {
            try
            {
                if (!string.IsNullOrEmpty(loginModel.Username) && !string.IsNullOrEmpty(loginModel.Password))
                {
                    var Username = loginModel.Username;
                    var Password = loginModel.Password;

                    var result = _IUserRepository.ValidUser(Username, Password);
                    if (result.id==0 || result.id < 0)
                    {
                        ViewBag.errormessage = "Enter Invalid Username and Password";

                    }
                    else
                    {
                        return RedirectToAction("Index");
                    }
                }
            }
            catch (Exception)
            {

                throw;
            }
            return View();
        }

UserRepository

  public class UserRepository : IUserRepository
        {
            private dbContext _context;
            public UserRepository(dbContext context)
            {
                this._context = context;
            }
            public bool UpdatePassword(user user)
            {
                throw new NotImplementedException();
            }

            public user ValidUser(string username, string passWord)
            {
                try
                {
                    var validate = (from user in _context.users
                                    where user.Username == username && user.Password == passWord
                                    select user).SingleOrDefault();
                    return validate;
                }
                catch (Exception ex)
                {

                    throw ex;
                }
            }
        }

IUserRepository

 public interface IUserRepository
    {
        user ValidUser(string username, string password);
        bool UpdatePassword(user user);

    }

LoginViewModel

 public class LoginViewModel
    {

        public int id { get; set; }

        [Required(ErrorMessage ="Username is Required")]
        public string Username { get; set; }
        [Required(ErrorMessage = "Password is Required")]
        public string Password { get; set; }
    }

Login.chtml

@model RepositoryPattren.Models.LoginViewModel

@{
    ViewBag.Title = "Login";
}

<h2>Login</h2>

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>LoginViewModel</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Username, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Username, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Username, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

1 Ответ

0 голосов
/ 21 октября 2019

Попробуйте проверить следующие ситуации в своем коде: 1 - убедитесь, что полученная вами модель входа не является нулевой. 2- Являетесь ли вы зарегистрированной зависимостью IUserRepository? если вы не регистрировались, экземпляр не внедряется. 3. Вы используете SingleOrDefault, тогда, если условие не совпадает, возвращается значение по умолчанию, равное нулю, и вы не проверяли на нулевое значение, так что сделайте, как показано ниже:

if (result!=null && result.id==0 || result.id < 0)
                    {
                        ViewBag.errormessage = "Enter Invalid Username and Password";

                    }
                    else
                    {
                        return RedirectToAction("Index");
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...