繁体   English   中英

在控制器和视图之间传递数据-ASP.NET MVC 4

[英]Passing data between controller and view - ASP.NET MVC 4

我正在做一个简单的调查,以学习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],我希望它呈现一个视图,其中写入了每个问题及其答案,但是出现了问题Viewmodel.T等于null。 我应该怎么做,不要再次反序列化?

您不想在MVC4中进行任何序列化或反序列化。 只需将数据作为视图模型对象传递,该数据将在您的视图中可用。

您可以为属性渲染一个隐藏字段,如下所示:

视图:

@model Namespace.UserAndTableViewmodel 

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

现在,您的HttpPost方法中应该有一个值。 基本上,如果未在您的视图中呈现值,则该值将不会发布到HttpPost方法中。 您的视图模型不会保留视图和控制器之间往返之间的值。 这就是为什么在再次将其返回视图之前,还需要在HttpPost中重新填充视图模型的原因。 它没有您在HttpGet中设置的值。

(不过,仅对不需要保护的数据使用隐藏字段。您还可以使用@Html.TextBoxFor@Html.LabelFor

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM