0

MVC3のユーザー用のモデルがあります。

public class User
{
    [Key]
    public virtual Guid UserId { get; set; }

    [Required]
    public virtual String Username { get; set; }

    [DataType(DataType.MultilineText)]
    public virtual String Comment { get; set; }

   ..loads of other properties

このクラスには、編集画面では実際には必要のない情報がたくさん含まれています。commentの一部だけを編集したいとしましょうuser。私はこのようなビューモデルを作成しようとしましたが、私がこの権利について行っているかどうかはわかりません

モデルを見る

 public class UserViewModel
  {
    public string notes;

  }

今、私は私のコントローラーにこれを持っています:

public ActionResult Edit(Guid id)
        {
           User user = Context.Users.Where(x => x.UserId == id).First();
          UserViewModel uvm = new UserViewModel();
          uvm.notes = user.Comment;
            return View(uvm);
        }

この部分は問題なく機能しているようで、情報が存在する場合は情報を渡します。編集ビューは次のようになります。

@model core.Areas.Manage.Models.UserViewModel
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>User Edit</legend>

        @Html.TextBoxFor(model => model.notes)


        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}

これは、コントローラーからのメモ/コメントを示しています。ただし、送信を押すと、モデルはnullになります-model.notesこの時点ではnullです:

 [HttpPost]
        public ActionResult Edit(Guid id, UserViewModel model)
        {

私は完全に間違ったことをしていますか?以前はモデル全体を渡しただけでしたが、これは理想的ではありません。ここで暗闇の中で突き刺すようなものです。SOに移る前に自分で実装しようと思っただけです。

4

2 に答える 2

3

ビューモデルで{get;set;}が宣言されていないことが原因かもしれません。この投稿を参照してください:{get; セットする; ViewModelで使用される}

于 2012-08-10T15:46:00.377 に答える
2

ノートをとして宣言しましたfield。モデルバインディングはフィールドでは機能しません。プロパティとして宣言する必要があります

public class UserViewModel
{
  public string notes  {set;get;}
}

ASP.NET MVCフレームワークには、DefaultModelBinderという名前のデフォルトのモデルバインダー実装が含まれています。これは、ほとんどのモデルタイプを効果的にバインドするように設計されています。これは、ターゲットモデルのプロパティごとに比較的単純で再帰的なロジックを使用して行われます。

于 2012-08-10T15:52:22.497 に答える