0

我有一个控制器动作,比如

public class Question {   
   public int Id { get;set; }
   public string Question { get;set; }
   public string Answer { get;set; } 
}

public ActionResult Questions() 
{   
  return View(GetQuestions()); 
}

public ActionResult SaveAnswers(List<Question> answers) 
{  
  ... 
}

视图> 看起来像:

<% for (int i = 0; i < Model.Count; i++) { %>   
 <div>
  <%= Html.Hidden(i.ToString() + ".Id") %>
  <%= Model[i].Question %>
  <%= Html.TextBox(i.ToString() + ".Answer") %>
 </div> 
<% } %>

显然这种观点是行不通的。我只是无法访问视图中的列表。

这方面的文档也已经过时了,似乎很多模型绑定列表的功能在 beta 版中都发生了变化。

4

3 回答 3

0

看看这个这个问题。还有这篇博文

编辑:至于访问视图中的模型。您确定您使用以下属性声明了您的吗?

<%@ Page Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<List<Namespace.Question>>" %>
//Assuming the GetQuestions() method returns a list of question objects.
于 2009-05-19T10:49:33.027 回答
0

我认为 Scott Hanselman 的帖子可能提供了答案。但是,您似乎试图通过在帖子中返回来绑定您查看对匿名对象的引用...0.Answer=answer...

相反,我相信您应该将您的字段绑定到引用答案 [index].Answer 的“列表答案”。

尝试以下操作:

<% for (int i = 0; i < Model.Count; i++) { %>   
 <div>
  <%= Html.Hidden("answer["+i.ToString() + "].Id", Model["+i.ToString() + "].Id) %>
  <%= Model[i].Question %>
  <%= Html.TextBox("answer["+i.ToString() + "].Answer", Model["+i.ToString() + "].Answer) %>
 </div> 
<% } %>

理查德

于 2009-05-19T11:09:25.777 回答
0

答案是不使用 html 助手。

<% for (int i = 0; i < Model.Count; i++) { %> 
  <div>
     <input type="hidden" name="answers[<%= i %>].Id" id="answers_<%= i %>_Id" value="<%= Model[i].Id %>" />
     <input type="text" name="answers[<%= i %>].Answer" id="answers_<%= i %>_Answer" value="<%= Model[i].Answer %>" />
  </div> 
<% } %>

不是很漂亮,但有效。重要的是 Name 和 Id 需要不同。名称允许有“[”、“]”,但 id 不是。

于 2009-10-12T14:00:44.150 回答