嗨,当我使用 ajax 调用获取局部视图时,我在获取正确的 ID 和名称时遇到了问题。
我想要像 "Blocks_0__Items_0__Id" 这样的 id。这些是使用 for 循环呈现的,因此主页:
@for (int blockIndex = 0; blockIndex < Model.Block.Count(); blockIndex++) {
@Html.EditorFor(model => Model.Blocks[blockIndex], "BlockView")
}
然后 BlockView 对使用和 editorfor 的项目进行相同的列表渲染。for 循环使 Id 和名称正确。
但是,如果我想将项目模板呈现为部分视图,我将得到的自然是没有块和项目部分。
为了解决这个问题,我调用了一个空的主页,该主页呈现一个始终包含一个项目的块。但这意味着对于我想通过 ajax 插入并由 modelbinder 读取的任何内容,我必须创建 2 个额外的局部视图!
解决方案 2 我认为是使用 ViewData.TemplateInfo.HtmlFieldPrefix 方法并设置它。但是,由于我有一个列表,其中包含一个列表,这是不可能的。我可以摆脱其中一个部分视图并使用: ViewData.TemplateInfo.HtmlFieldPrefix = "Block"
我看到了一个名为 Html.BeginCollectionItem("nameofitem") 的 mvc 1 和 2 Html 助手,但它不再存在。
有什么好主意吗?