Как правильно использовать DisplayForModel () и EditorForModel () в MVC - PullRequest
0 голосов
/ 04 апреля 2020

Я работаю на простом сайте со страницей регистрации в MVC, я хочу отобразить все свойства из класса User на странице, когда пользователь нажимает кнопку регистрация Я делаю это с @Html.EditorForModel, и когда нажимается кнопка «Далее», я хочу отобразить все данные, которые были введены на предыдущей странице. Я хочу сделать это с @ Html .DisplayForModel () . Я также использую дополнительные EditorTemplates для строки и DateTime и пользовательский Validator. Тем не менее, я искал в inte rnet ответы о том, как объединить все это вместе и обеспечить правильную работу.

Модель:

public class User : ValidationAttribute 
    {        
        [RegularExpression(@"^[a-zA-Z]+[ a-zA-Z-_]*$", ErrorMessage = "Error")]
        [Required(ErrorMessage = "Error")]
        public string  Name { get; set; }

        [RegularExpression(@"^[a-zA-Z]+[ a-zA-Z-_]*$", ErrorMessage = "Error")]    
        [Required(ErrorMessage = "Error")]
        public string  LastName { get; set; }

        [DataType(DataType.DateTime, ErrorMessage = "Error")]        
        [Required(ErrorMessage = "Error")]
        [DateRestriction]  // Custom
        public DateTime DateOfBirth { get; set; }

        [Required(ErrorMessage = "Error")]
        public string PlaceOfBirth { get; set; }  

        public double Age { get; set; } 

        [Required(ErrorMessage = "Error")]
        [EmsoRestriction(ErrorMessage = "Error")]
        public string  EMSO { get; set; }

        [Required(ErrorMessage = "Error")]
        public string  Address { get; set; }

        [StringLength(4)]
        [MinLength(4, ErrorMessage = "Error")]        
        public int PostNumber { get; set; }

        [Required(ErrorMessage = "Error")]
        public string  Post { get; set; }

        [Required(ErrorMessage = "Error")]
        public string  Country { get; set; }     

        [DataType(DataType.EmailAddress)]
        [Required(ErrorMessage = "Error")]
        [EmailAddress(ErrorMessage = "Error")]
        public string  Email { get; set; }

        [Required(ErrorMessage = "Error")]
        [DataType(DataType.Password)]
        [DisplayName("Re-enter Password")]
        [Compare("Password2", ErrorMessage = "Passwords must match")]
        public string  Password1 { get; set; }

        [Required(ErrorMessage = "Error")]
        [DataType(DataType.Password)]
        [DisplayName("Re-enter Password")]
        [Compare("geslo1", ErrorMessage = "Passwords must match")]
        public string  Password2 { get; set; }  
    }

Я столкнулся со следующим проблемы:

  • EditorForModel правильно отображает свойства, но игнорирует все ValidationMessageFor , записанные в EditorTemplate и ValidationSummary (), и отображает некоторые дополнительные текстовые поля из ValidationAttribute .

AddUserView:

@model User
@{
    ViewData["Title"] = "AddUser";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="row">

    @using (Html.BeginForm("index", "Registracija"))
    {
        <div class="form-group">
            @Html.EditorForModel()
        </div>

        @Html.ValidationSummary()

        <br /><input type="submit" value="Next" class="btn btn-primary float-right" />        
    }
</div>

EditorTemplate:

@model String
    <div>
        @Html.TextBox("", Model, new { @class = "form-control " })
        @Html.ValidationMessage("",Model)
    </div>
  • DisplayForModel вообще не отображает никаких элементов

ReviewUserView:

@model SpletniObrazec.Models.User
@{
    ViewData["Title"] = "UserReview";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<div>
    @Html.DisplayForModel()
</div>
  • Проверка модели всегда верна. RegistrationController:
 public class RegistrationController : Controller
    {
        [HttpGet]
        public ActionResult Index()
        {
            return View("~/Views/Registration/AddUser.cshtml");
        }
        [HttpPost]
        public ActionResult Index(string Name, string LastName, DateTime DateOfBirth, string PlaceOfBirth, int Age, string Address, int PostNumber, string Post, string Country, string Email, string Password1, string Password2)
        {

            if (ModelState.IsValid)
            {
                return View("~/Views/Registration/UserReview.cshtml");
            }

            return View("~/Views/Registration/AddUser.cshtml");
        }

    }

Если у кого-то есть предложения по поводу того, что делать или где искать или что делать лучше, помогите пожалуйста.

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