4

以下にモデル(ユーザー)があり、それを使用して新しいユーザーを追加し、既存のユーザーを更新します。新しいユーザーを追加するときはユーザー名とパスワードを入力する必要があり、更新するときはパスワードの変更が許可されていないため、ユーザー名のみを入力する必要があります。ここに問題があります。新しいユーザーを追加すると、名前とパスワードの両方の値を入力して ModelState.IsValid が true を返すため、すべて正常に機能しますが、ユーザーを更新するときにパスワードの入力がないため、常に null 値があり、 ModelState.IsValid は常に false を返します。追加ビューではパスワードが必要で、更新ビューでは必要ない場合でも、同じモデルを使用する方法はありますか? 何か提案はありますか?

     public class User {

        public int ID { get; set; }

        [Display(Name = "Nome do Usuário")]
        [Required(ErrorMessage = "Digite o Nome do Usuário.")]
        public string name { get; set; }

        [Display(Name = "Senha")]
        [Required(ErrorMessage = "Digite a Senha.")]
        public string password { get; set; }

    }



public ActionResult Add()
        {
            return View();
        }

      [HttpPost]
            public ActionResult Add(User user)
            {
                UsuariosViewModel viewModel = new UsuariosViewModel();


                if (ModelState.IsValid)
                {
                    viewModel.Msg = new AdmUsuarios().CadastraUsuario(user);
                }
                return View(viewModel);
            }



    public ActionResult Update(int id)
            {
                UsuariosViewModel viewModel = new UsuariosViewModel();

            using (var dataContext = new DBEntities()) 
            {
                Repository<User> repository = new Repository<User>(dataContext);
                viewModel.User = repository.GetById(id);
            }

                return View(viewModel);
            }

        [HttpPost]
        public ActionResult Update(User user, int id)
        {          
            UsuariosViewModel viewModel = new UsuariosViewModel();

            if (ModelState.IsValid)
            {
                viewModel.Msg = new AdmUsuarios().AlteraUsuario(user, id);
            }
            return View();
        }
4

2 に答える 2

5

ビューモデルを使用する必要があります。

データ注釈は、ビューに渡されるビューモデルに属します

public class CreateViewModel
{
  public int ID { get; set; }

  [Display(Name = "Nome do Usuário")]
  [Required(ErrorMessage = "Digite o Nome do Usuário.")]
  public string name { get; set; }

  [Display(Name = "Senha")]
  [Required(ErrorMessage = "Digite a Senha.")]
  public string password { get; set; }
}

そして編集用

 public class EditViewModel
    {
      public int ID { get; set; }

      [Display(Name = "Nome do Usuário")]
      [Required(ErrorMessage = "Digite o Nome do Usuário.")]
      public string name { get; set; }

      //perhaps you don't need the password at all in the edit view
    }

これらのクラスをドメイン モデル ( User) ではなくビューに渡し、コントローラーでビュー モデルのプロパティをモデルにマップしてから、データ ソースに永続化します。

于 2013-02-28T18:35:35.327 に答える