【问题标题】:Getting id's on elements in partial views获取部分视图中元素的 id
【发布时间】: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


【解决方案1】:

您还必须将 EditorFor 用于您的 Model.Items。 因此,将 _MyPartial 更改为更相关的内容,例如 MyEditorForMyClass.cshtml。 在 Shared 或您正在使用的文件夹中创建一个“EditorTemplates”文件夹,并将“MyEditorForMyClass.cshtml”文件放入其中。

然后执行以下操作:

MyView.cshtml: 

--------------
@model MyModel
using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post)
{
    @Html.EditorFor(model => Model.items,"MyEditorForMyClass"}

}

EditorFor 模板/帮助方法允许您呈现标准数据类型和您自己的包含多个属性的复杂对象。

【讨论】:

  • 我很抱歉回复晚了,但我一直忙于一些完全不同的事情。EditorTemplate 确实是正确的答案。现在一切都好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多