.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确实是正确的答案。现在一切都好了。谢谢!