0

我想使用(引导)模式来显示一个翻译对话框,但它给出了一个错误的名称。在浏览器源代码中,它显示NameTranslations.[0].Translatio n,而它必须是NameTranslations[0].Translation(在 NameTranslation 和 [i] 之间没有点)。

一些代码:

视图/共享/EditorTemplate/翻译.cshtml

@model List<Data.ViewModels.Shared.TranslationViewModel>

@for (var i = 0; i < Model.Count; i++)
{
    @Html.TextBoxFor(m => Model[i].Translation)
}

创建.cshtml

    @Html.EditorFor(model => Model.NameTranslations,"Translation")

浏览器结果

<input id="NameTranslations__0__Translation" name="NameTranslations.[0].Translation" type="text" value="">

除了名称约定错误之外,一切都很好。如果我删除浏览器代​​码中的点,它会很好地发布在控制器中。

4

3 回答 3

1

通过使用 new { name = yourdynamicName } 指定显式值来分配名称属性

于 2014-10-09T11:35:00.923 回答
0

Translation模板更改为仅用于单个实体的编辑器模板:

@model Data.ViewModels.Shared.TranslationViewModel

@Html.TextBoxFor(m => m.Translation)
...

并在主视图中遍历集合:

@for (int i = 0; i < Model.NameTranslations.Count; i++)
{
    @Html.EditorFor(m => m.NameTranslations[i], "Translation")
}
于 2014-10-09T11:53:45.730 回答
0

我用 ViewData 解决了这个问题

创建.cshtml

@model List<Data.ViewModels.Shared.TranslationViewModel>
@{
    var ModelName = ViewData["ModelName"];
}

部分视图:视图/共享/ _Translation .cshtml

@for (var i = 0; i < Model.Count; i++)
{
    var LanguageID = ModelName + "[" + i + "].LanguageID";
    var TranslationName= ModelName + "[" + i + "].Translation";

    <input type="hidden" name="@LanguageID" value="@Model[i].LanguageID" />
    <input type="text" name="@TranslationName" value="@Model[i].Translation" />
    <br />
}

我认为这不是最好的方法,但如果 ViewModel 发生变化,您可以在一个地方(部分)而不是几个地方替换它。

于 2014-10-09T13:00:24.197 回答