模型绑定问题

时间:2011-08-20 16:01:59

标签: asp.net-mvc asp.net-mvc-3

使用Asp.net MVC,我有一个强烈绑定到“List”的视图,并循环部分渲染部分视图,如下所示

<%
  foreach (var q in Model)
  {
      Html.RenderPartial("Question", q);
  }
%>

并且此部分视图强烈绑定到“问题”

<%
      foreach (var option in Model.Options)
      {
%>
      <p/>

   <%=Html.RadioButton(option.QuestionId.ToString(), (option.IsSelected) )%> &nbsp;<%= option.OptionBody%>
<%
      }
  }
%>

在主视图中回复帖子,如下所示

 <% Html.BeginForm("Submit", "Questionnaire", FormMethod.Post); %> 
 <input type="submit" name="submit" value="submit" />
 <% Html.EndForm(); %>

最后在我的控制器

 [AcceptVerbs(HttpVerbs.Post)] 
 public ActionResult Submit(List<Question> test)
 {
     var x = test;
     return View("Submit");
 }

我的表格是

<% Html.BeginForm(); %>
<%:"UserName : "%>

<%=ViewData["UserName"]%>
<%=Html.TextBox("test",ViewData["tt"])%>
<p />
<%:"Phone Number :"%>

<%=ViewData["PhoneNumber"]%>
<p />
<%
      foreach (var q in Model)
      {
          Html.RenderPartial("Question", q);
      }
%>


<% Html.EndForm(); %>

 <% Html.BeginForm("Submit", "Questionnaire", FormMethod.Post); %>
 <% TempData["form"] = ViewData;%>
 <input type="submit" name="submit" value="submit" />
<% Html.EndForm(); %>

当我将所有内容都包含在一个开始表单中时,回发dos not fire“

我的问题是 为什么x总是为空? 以及如何获取更新的模型(将用户选择到部分视图中呈现的单选按钮) 我应该使用TempData存储我的价值吗?怎么样?

收到正确的更新型号后,我会将其保存到DB。 谢谢!

1 个答案:

答案 0 :(得分:3)

 <% Html.BeginForm("Submit", "Questionnaire", FormMethod.Post); %> 
 <input type="submit" name="submit" value="submit" />
 <% Html.EndForm(); %>

在我看来,您的表单内部只有一个input。您需要在表单中呈现您的编辑器,否则它们将不会作为POST的一部分包含在内。

更新

所以现在你有两个表单:一个有你想要提交的输入,另一个有实际的按钮。问题是,单击第二个上的提交按钮将只提交第二个(几乎为空)表单。为什么不组合你的表格?

<% Html.BeginForm("Submit", "Questionnaire", FormMethod.Post); %>
<%=ViewData["UserName"]%>
<%=Html.TextBox("test",ViewData["tt"])%>
<p />
<%:"Phone Number :"%>

<%=ViewData["PhoneNumber"]%>
<p />
<%
    foreach (var q in Model)
    {
        Html.RenderPartial("Question", q);
    }
%>
<input type="submit" name="submit" value="submit" />
<% Html.EndForm(); %>