#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);
и теперь все работает так, как ожидалось.
мое представление является строго типизированным представлением, и я просто хочу видеть сообщения об ошибках рядом с текстовым полем, которые не прошли проверку успешно.