Member 13834983 Ответов: 1

Использование нескольких моделей в одном представлении-ASP.NET MVC


Мне нужно сделать логин ,зарегистрировать страницу в системе ASP.NET MVC в пределах одного представления. Но приложение должно иметь 2 отдельных класса модели для входа в систему и регистрации действий, пожалуйста, проверьте ниже код.

Смотреть
@using PAMWebApp.Models;
@model Tuple<LoginViewModel,RegisterViewModel>

  @using (Html.BeginForm("Login", "Home", FormMethod.Post, new { id = "login-form", role = "form", style = "display: block;", }))
     {
     <div class="form-group">
     @Html.TextBoxFor(m => m.Item1.UserName, new { @class = "form-control", id = "username", name = "username", type = "text", placeholder = "Username", tabIndex = 1 })
     </div>

     <div class="form-group">
      @Html.TextBoxFor(m => m.Item1.Password, new { @class = "form-control", type = "password", id = "password", name = "pass", placeholder = "Password", tabindex = 2 })
    </div>

    <div class="form-group">
     <div class="row">
       <div class="col-sm-6 col-sm-offset-3">
          <input type="submit" name="login-submit" id="login-submit" tabindex="4" class="form-control btn btn-login" value="Log In">
      </div>
       </div>
       </div>
 }

Контроллер
[HttpPost]
    [AllowAnonymous]
    public ActionResult Login(LoginViewModel model)
    {
        if (ModelState.IsValid)
        {
            string name = model.UserName;
            string pwd = model.Password;
        }
     }


Модель
public class LoginViewModel
    {
        [Required]
        [Display(Name = "User Name")]
        public string UserName { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }
    }

    public class RegisterViewModel
    {
        [Required]
        [Display(Name = "User Name")]
        public string UserName { get; set; }

        [Required]
        [Display(Name = "Email")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }


Что я уже пробовал:

It doesn't pass the values from view to controller. So please any one correct me, .It's working fine, if it is use one model

F-ES Sitecore

Ваше действие контроллера вообще не возвращает представление. Несмотря на это, google "multiple models mvc", и вы найдете множество предложений о том, как решить эту проблему, это часто задаваемый вопрос. Обычно вы создаете новый класс модели представления, который имеет ваши другие модели в качестве свойств.

1 Ответов

Рейтинг:
2

Vincent Maverick Durano

Вы можете обернуть свой LoginViewModel и RegisterViewModel модели в одной модели. Это означает, что вы создадите новый класс, который содержит ваши существующие модели, чтобы вы могли ссылаться на новый класс в своем приложении. View вместо. Например:

public class MemberModel{
    public LoginViewModel LoginModel { get; set; }
    public RegisterViewModel RegisterModel { get; set; }
    //add more properties here if necessary
}


Затем вы можете ссылаться на новую модель следующим образом в своем представлении:

@model PAMWebApp.Models.MemberModel