【发布时间】:2011-09-28 08:56:35
【问题描述】:
我认为 - 除其他外 - 包含元素列表。我想重用这个列表,所以我把它移到部分视图中。我的视图包含一个表单,并且在发布后我想在列表中包含一些值。因此,我使用@Html.EditorFor(m => m.Something) 生成输入框,该输入框将获得唯一的 ID。该视图是强类型的,以使用“MyModel”作为模型。在发布后,MVC 框架可以很好地处理所有内容 - 将值重新组合到 MyModel 对象中,其中包含输入和我使用的一些字段Html.HiddenFor。都好。
现在我将其移至局部视图。部分视图仅适用于列表,因此被强类型化为模型列表。我从我的主视图中包含这个视图,并传入我希望它呈现的列表。部分视图中的表格代码与之前完全相同,只是它被更改为从列表而不是 MyModel 中获取值。所有数据都完美显示,但是有问题。输入框不再获得 Id。并且因为他们没有得到 Id,所以他们的值不包含在发布的表单中 - 因此它们不会出现在我作为 post 方法的输入得到的模型中。我尝试使用@Html.Partial("_MyPartial", Model.Items) 和@{Html.RenderPartial("_MyPartial", Model.Items);} 包含部分视图
所以问题是;如何使用部分视图进行这项工作?我怎样才能找回那个ID?
以下是一些示例代码,以防有任何不清楚的地方:
MyModel.cs
----------
public class MyClass
{
public string Val1 { get; set; }
public string Val2 { get; set; }
}
public class MyModel
{
public List<MyClass> Items {get; set; }
}
MyView.cshtml:
--------------
@model MyModel
using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post))
{
@Html.Partial("_MyPartial", Model.Items)
}
_MyPartial.cshtml:
------------------
@model List<MyClass>
<table>
<tbody>
for (var i = 0; i< Model.Count; i++)
{
<tr>
<td>
@Model[i].Val1
@Html.HiddenFor(model => model[i].Val1)
</td>
<td>@Html.EditorFor(model => model[i].Val2)</td>
</tr>
}
</tbody>
</table>
【问题讨论】:
-
这是您的完整代码吗? Html.BeginForm() 在哪里?
-
不,不是。我试着只包括在问题的上下文中应该有任何意义的部分。自然应该包含 Html.BeginForm() - 所以我现在添加了这个..
-
如果您提供 Model 而不是 Model.Items 会发生什么(并更改您的部分代码以使其工作)?
标签: .net asp.net-mvc-3 razor partial-views