0

嗨,当我使用 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 助手,但它不再存在。

有什么好主意吗?

4

1 回答 1

0

尝试使用 @Html.TextBox() 而不是 @Html.EditorFor()

使用 @Html.TextBox 你可以传递一个名称和一个值

@Html.TextBox("WhateverNameYouWant", Model.Blocks[blockIndex])

于 2013-01-10T14:02:52.940 回答