2009-05-19 64 views
0

我喜歡Modelbinding列出

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> 
<% } %> 

顯然,這種觀點是行不通的。我只是無法訪問視圖中的列表。

此文檔也過時了,它似乎圍繞模型綁定列表中的哪些功能在測試版中進行了更改。

回答

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不是。

0

看看thisthis question。另外this blog post

編輯:至於在視圖中訪問模型。你確定你用以下屬性聲明你的?

<%@ Page Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<List<Namespace.Question>>" %> 
//Assuming the GetQuestions() method returns a list of question objects. 
+0

這些帖子主要是關於在帖子後將數據放入模型中。我的問題是,當渲染第一個視圖時,我沒有從模型中獲取數值。 – AndreasN 2009-05-19 11:00:27

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> 
<% } %> 

理查德