2010-01-06 32 views
2

我使用v2版本與實體框架v4的學習MVC相關對象。假設我有3個對象Game,Points和Players。他們是按以下方式相關: 遊戲有點和點可以具有與其相關聯的玩家(1個遊戲以多點與點對象可以有一個播放器)。EditTemplates與MVC2

我試圖使用EditTemplates功能在MVC2來呈現自己的看法。在我的遊戲編輯視圖中,我希望可以編輯基本的遊戲對象信息,以及相關的點對象。目前我使用「<%= Html.EditorForModel() %>「(這似乎很慢)來渲染,編輯,查看,然後我有一個具體的遊戲和點EditTemplates。

的數據正確呈現並且是可編輯的兩個遊戲,指向的信息。當我執行更新並提交表單時,我在Update ActionResult中收到「Game」對象。基本屬性爲Game對象填充,但任何深度屬性(如Points)都不是;它們顯示爲空。如果我看的Request.Form變量的調試,我可以看到的字段被傳遞到服務器的點,但不要把自己放回遊戲對象。

在我的遊戲EditTemplate我使用下面的渲染積分對象:

<%= Html.EditorFor(c => c.Points) %> 

我的積分EditTemplate樣子:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Domain.Model.Entities.Point>" %> 

<%= Html.EditorFor(c => c.PntId)%> 
<tr><td><%= Html.DisplayFor(c => c.User.Username)%></td><td><%= Html.EditorFor(c => c.UserPnt)%></td></tr> 

我的HTML呈現如下所示:

<input id="Points_Points_0__PntId" name="Points.Points[0].PntId" type="hidden" value="226" /> 
<tr><td>Jay</td><td><input class="text-box single-line" id="Points_Points_0__UserPnts" name="Points.Points[0].UserPnts" type="text" value="20" /></td></tr> 

<input id="Points_Points_1__PntId" name="Points.Points[1].PntId" type="hidden" value="227" /> 
<tr><td>Joe</td><td><input class="text-box single-line" id="Points_Points_1__UserPnts" name="Points.Points[1].UserPnts" type="text" value="20" /></td></tr> 

我該如何獲得深層屬性以在遊戲中回傳o通過Controller Update ActionResult接受的對象,以便我可以同時更新它們?

UPDATE: 這肯定似乎是與EditTemplate被渲染的點集合的方式的問題。如果我手動添加以下的觀點它不正確地顯示在遊戲對象:

<input class="text-box single-line" id="Game_Points_0__UserPnts" name="Game.Points[0].UserPnts" type="text" value="20" /> 
     <input class="text-box single-line" id="Game_Points_1__UserPnts" name="Game.Points[1].UserPnts" type="text" value="20" /> 

知道爲什麼這被渲染爲「Points.Points [指數],而不是Game.Points [指數]我試着與在EditFor參數搞亂:

<%= Html.EditorFor(c => c.Points,null,"Game.Points") %> 

但隨後的輸入呈現爲Game.Points.Game.Points [指數]

回答

1

這顯然是在MVC的早期的版本中的錯誤。根據我在MVC論壇上收到的來自微軟的評論,它似乎在RTM版本中得到修復。

我已經恢復到使用for循環生成的平均時間的HTML。

下面是引用了MVC論壇迴應: http://forums.asp.net/t/1515461.aspx

0

它們必須被命名Game.Points [0] .PntId 或您可以將點作爲參數添加到您的操作中並將它們組合起來特別是如果你堅持他們在DB,你必須附加他們。

+0

我想,如果這個問題是因爲它被渲染爲「Points.Points [索引]」。這看起來不正確。我沒有看到一種方法來控制呈現「點」輸入的名稱。這是MVC自動完成的,當我告訴它使用「Html.EditorFor(c => c.Points)」 我試圖將「IList Points」作爲參數添加到我的Update ActionResult中,但也返回null。 – Jay 2010-01-06 14:32:43