.net 获取id';局部视图中元素的s

.net 获取id';局部视图中元素的s,.net,asp.net-mvc-3,razor,partial-views,.net,Asp.net Mvc 3,Razor,Partial Views,我有一个观点,其中包括一个元素列表。我想重用此列表,所以我将其移出到局部视图。我的视图包含一个表单,在帖子中我想在列表中包含一些值。因此,我使用@Html.EditorFor(m=>m.Something)生成输入框,该框将获得唯一的Id。该视图是强类型的,使用“MyModel”作为模型。在post上,MVC框架可以很好地处理所有事情——将值重新组合到一个MyModel对象中,该对象包含输入和我在上使用的一些字段Html.HiddenFor。一切都好 现在我把它移到局部视图。局部视图仅在列表上工

我有一个观点,其中包括一个元素列表。我想重用此列表,所以我将其移出到局部视图。我的视图包含一个表单,在帖子中我想在列表中包含一些值。因此,我使用
@Html.EditorFor(m=>m.Something)
生成输入框,该框将获得唯一的Id。该视图是强类型的,使用“MyModel”作为模型。在post上,MVC框架可以很好地处理所有事情——将值重新组合到一个MyModel对象中,该对象包含输入和我在上使用的一些字段
Html.HiddenFor
。一切都好

现在我把它移到局部视图。局部视图仅在列表上工作,因此强类型化为模型列表。我从主视图中包括此视图,并传入我希望它呈现的列表。部分视图中的表代码与以前完全相同,只是它被更改为从列表而不是MyModel中获取值。所有数据都显示得很完美,但存在一个问题。输入框不再获得Id。因为它们没有Id,所以它们的值不会包含在发布的表单中,因此它们不会出现在作为post方法输入的模型中。我尝试使用
@Html.partial(“\u MyPartial”,Model.Items)
@{Html.RenderPartial(\u MyPartial,Model.Items);}

所以问题是,;我怎样才能在局部视图下工作?我怎样才能拿回那个身份证

以下是一些示例代码,以防有任何不清楚的地方:

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>
MyModel.cs
----------
公共类MyClass
{ 
公共字符串Val1{get;set;}
公共字符串Val2{get;set;}
}
公共类MyModel
{
公共列表项{get;set;}
}
MyView.cshtml:
--------------
@模型MyModel
使用(Html.BeginForm(“SomeAction”、“SomeController”、FormMethod.Post))
{
@Html.Partial(“\u MyPartial”,Model.Items)
}
_MyPartial.cshtml:
------------------
@模型列表
对于(var i=0;imodel[i].Val1)
@EditorFor(model=>model[i].Val2)
}

您必须为您的
型号使用EditorFor。项目也必须使用。
因此,将_MyPartial更改为更相关的内容,例如
MyEditorForMyClass.cshtml
。 在共享文件夹或您正在使用的文件夹中创建一个“
EditorTemplates
”文件夹,并将“
MyEditorForMyClass.cshtml
”文件放在其中

然后执行以下操作:

MyView.cshtml: 

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

}

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

这是你的全部密码吗?Html.BeginForm()在哪里?不,不是。我试着只包括在问题的上下文中应该有意义的部分。当然,Html.BeginForm()应该包含在内,所以我现在添加了这个。如果您提供Model而不是Model.Items(并更改您的分部代码以使其正常工作),会发生什么情况?我很抱歉响应太晚,但我一直忙于完全不同的内容。。EditorTemplate确实是正确的答案。现在一切都好了。谢谢!