2

ASP.NET MVC 4 の基本を学習するために、簡単な調査を行っています。これが私のコードです。

        [HttpGet]
        public ActionResult Index()
        {
            UserAndTableViewmodel Viewmodel = new UserAndTableViewmodel();
            Viewmodel.T = Deserialize();
            Viewmodel.U = new User();

            for (int i = 0; i < Viewmodel.T.Questions.Count(); i++)
            {
                Viewmodel.U.UserChoices.Add(new Choice(Viewmodel.T.Questions[i].Choices[0].Value));
            }

            return View(Viewmodel);
        }

        [HttpPost]
        public ActionResult Index(UserAndTableViewmodel Viewmodel)
        {
            // Viewmodel.T = Deserialize();

            if (ModelState.IsValid)
            {
                return View("Thanks", Viewmodel);
            }
            else
            {
                return View(Viewmodel);
            }
        }

XML コードは次のとおりです。

<Table>
  <Question Content="Question one">
    <Choice Value="Answer 1" />
    <Choice Value="Answer 2" />
  </Question>
  <Question Content="Question two">
    (...)
  </Question>
</Table>

逆シリアル化されたデータを「インデックス」ビューに渡し、ユーザーは自分の回答を選択できます。次に、データが[HttpPost]に投稿され、各質問とその回答が書き込まれるビューをレンダリングしたいのですが、問題が発生します-nullにViewmodel.T等しいです。再度デシリアライズしないようにするには、どうすればよいですか?

4

2 に答える 2

3

MVC4 でシリアル化または逆シリアル化を実行する必要はありません。ビューで使用できるビューモデルオブジェクトとしてデータを渡すだけです。

于 2013-10-24T11:26:36.720 に答える
2

次のように、プロパティの非表示フィールドをレンダリングできます。

意見:

@model Namespace.UserAndTableViewmodel 

@using(Html.BeginForm()){
    @Html.HiddenFor(m => m.T)
    ...
}

これで、HttpPost メソッドに値が含まれているはずです。基本的に、値がビューに表示されない場合、HttpPost メソッドにポストされません。ビューモデルは、ビューとコントローラー間のラウンドトリップ間で値を保持しません。これが、再びビューに戻す前に、HttpPost でビュー モデルを再設定する必要がある理由です。HttpGet で設定した値がありません。

(ただし、保護する必要のないデータには非表示フィールドのみを使用してください。@Html.TextBoxForまたはを使用することもできます@Html.LabelFor

于 2013-10-27T12:40:05.807 に答える