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