Исключение возврата нулевого указателя страницы просмотра

#html #asp.net #model-view-controller

#HTML #asp.net #модель-вид-контроллер

Вопрос:

когда я пытаюсь получить доступ к регистрации, как я вижу в отладке, возникает проблема, когда код попадает в представление. я получаю исключение во время выполнения «System.Web.Mvc.WebViewPage.Model.get возвращает значение null.» Пожалуйста, ПОМОГИТЕ

вот полный сбой :

Исключение System.NullReferenceException: ‘Ссылка на объект не установлена для экземпляра объекта.’

System.Web.Mvc.WebViewPage.Модель.возвращает значение null.

здесь происходит :

   @{
      ViewBag.Title = "SignUp";
   }
  

Регистрация.cshtml

   <body>
<div class="signup-form">
    <form class="signup-form" action="SignupSubmit">
        <div class="col-md-8 order-md-1">
            <h2>SignUp</h2>
            <h3>Create an account</h3>
            <h4 class="mb-3">Please complete your details : </h4>
            <div class="row">
                <div class="col-md-4 mb-3">
                    <label for="firstName">Id number</label>
                    <input type="text" class="form-control" name="userid" id="idnum" value="@Model.userid"> @Html.ValidationMessageFor(u => u.userid)
                    <div class="invalid-feedback">
                        Valid id number is required.
                    </div>
                </div>
                <div class="col-md-4 mb-3">
                    <label for="firstName">First name</label>
                    <input type="text" class="form-control" name="firstName" id="firstName" value="@Model.firstName"> @Html.ValidationMessageFor(u => u.firstName)
                    <div class="invalid-feedback">
                        Valid first name is required.
                    </div>
                </div>
                <div class="col-md-4 mb-3">
                    <label for="lastName">Last name</label>
                    <input type="text" class="form-control" name="lastName" id="lastName" value="@Model.lastName"> @Html.ValidationMessageFor(u => u.lastName)
                    <div class="invalid-feedback">
                        Valid last name is required.
                    </div>
                </div>
            </div>

            <div class="mb-3">
                <label for="email" class="col-sm-2 col-form-label">Email </label>
                <input type="email" class="form-control" name="email" id="inputEmail" placeholder="you@example.com" value="@Model.email">  @Html.ValidationMessageFor(u => u.email)
                <div class="invalid-feedback">
                    Please enter a valid email address for shipping updates.
                </div>
            </div>

            <div class="mb-3">
                <label for="inputPassword" class="col-sm-2 col-form-label">Password</label>
                <input type="password" class="form-control" name="password" id="inputPassword" placeholder="Password" value="@Model.password"> @Html.ValidationMessageFor(u => u.password)
                <div class="invalid-feedback">
                    Please enter a valid password with numbers and letters.
                </div>
            </div>
            <label class="checkbox-inline"><input type="checkbox" required="required"> I accept the <a href="#">Terms of Use</a> amp;amp; <a href="#">Privacy Policy</a></label>
            <hr class="mb-4">
            <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
            @Html.ActionLink("Already have an account? Login here. ", "SignIn", "User", new { area = "" }, new { @class = "navbar-brand" })
        </div>
    </form>
</div>
  

UserController.cs

     public ActionResult SignUp()
    {
        return View(new User());
    }
    public ActionResult SignupSubmit(User user)
    {
        if (ModelState.IsValid)
        {
            AddUserToDB(user);
        }
        else
        {
            return View("SignUp");
        }

        TempData["Falied"] = "You can now connect with your details";
        return RedirectToAction("SignIn", "User");
    }

    [HttpPost]
    public bool AddUserToDB(User u)
    {
        try
        {
            UserDal dal = new UserDal();
            dal.users.Add(u);
            dal.SaveChanges();
        }

        catch (DbEntityValidationException ex)
        {
            foreach (var errors in ex.EntityValidationErrors)
            {
                foreach (var validationError in errors.ValidationErrors)
                {
                    // get an error message 
                    string errorMessage = validationError.ErrorMessage;
                    Trace.TraceInformation("Property: {0} Error: {1}",
                    validationError.PropertyName,
                    validationError.ErrorMessage);
                }
            }
            return false;
        }
        return true;
    }
  

User.cs

 public class User
{
    [Key]
    [Required]
    [RegularExpression("^[0-9]{9}$", ErrorMessage = "ID must be with 9 numbers")]
    public string userid { get; set; }
    [Required]
    [RegularExpression("^[a-z] $", ErrorMessage = "First Name must be only Characters")]
    public string firstName { get; set; }
    [Required]
    [RegularExpression("^[a-z] $", ErrorMessage = "Last Name must be only Characters")]
    public string lastName { get; set; }
    [Required]
    [RegularExpression(@"^([w.-] )@([w-] )((.(w){2,3}) )$", ErrorMessage = "Email must conatain characters seperate with @")]
    [StringLength(100, MinimumLength = 4, ErrorMessage = "Email must be with at least 4 characters or Maximum 50 caracters")]
    public string email { get; set; }
    [Required]
    [RegularExpression(@"^(?=.*[A-Za-z])(?=.*d)[A-Za-zd]{8,}$", ErrorMessage = "Password must conatain eight characters, at least one letter and one number")]
    [StringLength(8, MinimumLength = 8, ErrorMessage = "Password must be with 8 Characters")]
    public string password { get; set; }
    public string permission { get; set; }
    public float totalHoures { get; set; }

}
  

Комментарии:

1. Добавьте (@model User) перед строкой, которая выдает ошибку

2. @model MyStoreProject. Модели. Пользователь @{ ViewBag. Title = «Регистрация»; } уже есть @…

3. Почему вы вообще хотите показать значение =»Модель. Имя пользователя » при регистрации?:. Просто удалите (нового пользователя) в представлении возврата, и нет необходимости устанавливать значения при регистрации пользователя

4. проблема заключалась в том, что пользователь не отправлял сюда… else { return View(«Регистрация»); } .. поэтому я изменил этот возврат на «t = return View («Регистрация», пользователь);

Ответ №1:

проблема заключалась в том, что пользователь не отправлял сюда…

 else { 
        return View("SignUp");
      } 
  

итак, я изменил код на

 return View("SignUp",user); 
  

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