Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用MVC2编辑模板和相关对象_.net_Asp.net Mvc 2 - Fatal编程技术网

.net 使用MVC2编辑模板和相关对象

.net 使用MVC2编辑模板和相关对象,.net,asp.net-mvc-2,.net,Asp.net Mvc 2,我正在使用实体框架v4的v2版本学习MVC。假设我有3个游戏对象,点数和玩家。它们以以下方式相互关联: 游戏有点数,点数可以有一个玩家与之关联(一个游戏对应多个点数,一个点数对象可以有一个玩家) 我正在尝试使用MVC2中的EditTemplates功能来渲染视图。在我的游戏编辑视图中,我希望可以编辑基本的游戏对象信息,以及相关的点对象。目前,我正在使用“”(这似乎很慢)来呈现编辑视图,然后我有一个特定的游戏和点编辑模板 数据正确呈现,可编辑游戏和积分信息。当我执行更新并提交表格时,我收到“游戏”

我正在使用实体框架v4的v2版本学习MVC。假设我有3个游戏对象,点数和玩家。它们以以下方式相互关联: 游戏有点数,点数可以有一个玩家与之关联(一个游戏对应多个点数,一个点数对象可以有一个玩家)

我正在尝试使用MVC2中的EditTemplates功能来渲染视图。在我的游戏编辑视图中,我希望可以编辑基本的游戏对象信息,以及相关的点对象。目前,我正在使用“
”(这似乎很慢)来呈现编辑视图,然后我有一个特定的游戏和点编辑模板

数据正确呈现,可编辑游戏和积分信息。当我执行更新并提交表格时,我收到“游戏”对象。游戏对象的基本属性已填充,但任何深度属性(如点)均未填充;它们显示为空。如果查看请求,我可以在调试中查看表单变量,我可以看到点字段正在传递到服务器,但不会将其自身放回游戏对象

在我的游戏编辑器模板中,我使用以下方法渲染点对象:

<%= Html.EditorFor(c => c.Points) %>
c.Points)%%>
我的点编辑器模板如下所示:

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

c、 PntId)%>
c、 User.Username)%%>c.UserPnt)%%>
呈现的我的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>

杰伊
乔
我如何才能将深度属性发回控制器更新ActionResult接受的游戏对象中,以便我可以同时更新它们

更新: 这显然是EditTemplate呈现Points集合的方式存在问题。如果我手动将以下内容添加到视图中,它确实会正确显示在游戏对象中:

<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[index]而不是Game.Points[index]”吗?我尝试在EditFor中修改参数:

<%= Html.EditorFor(c => c.Points,null,"Game.Points") %>
c.积分,空,“Game.Points”)%%>

但随后输入呈现为Game.Points.Game.Points[index]

它们必须命名为Game.Points[0].PntId
或者,你可以在你的操作中添加点作为参数,并将它们组合在一起。特别是如果你在DB中持久化它们,你必须附加它们。

这显然是MVC早期版本中的一个缺陷。根据我在MVC论坛上从Microsoft收到的评论,RTM版本中似乎已修复

我已经恢复使用for循环来同时生成HTML

以下是MVC论坛的回复供参考:

我想知道问题是否是因为它将其呈现为“Points.Points[index]”。这看起来不正确。我看不到控制“Points”输入呈现的名称的方法。当我告诉MVC使用“Html.EditorFor(c=>c.Points)”时,MVC会自动执行此操作。我试图添加“IList Points”“作为我的Update ActionResult的参数,但它也返回null。