2014-10-09 63 views
0

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

某些代码:

查看/共享/ 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") 

BrowserResult

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

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

​​

和迭代:

回答

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中改变,你可以将它替换成一个地方(部分)而不是几个。

1

通过使用新的{名称= yourdynamicName}

+0

我尝试这样@ Html.TextBoxFor(M =>模型[I] .Translation,新的{名称=模型[I] .Translation}) 但结果是相同的 – PJDW 2014-10-09 11:43:31

+0

然后尝试分配值存入本地如var varName = Model [i] .Translation或tempName = Model [i] .Translation +“_”+ i,并将tempName分配给name属性。如果仍然不工作,尝试编辑运行时的值并查看编辑后的值是否已分配 – Oasis 2014-10-09 11:48:47

0

进行更改到Translation模板是只有一个实体的编辑模板指定明确的价值分配中的name属性通过不是主视图中的集合:

@for (int i = 0; i < Model.NameTranslations.Count; i++) 
{ 
    @Html.EditorFor(m => m.NameTranslations[i], "Translation") 
} 
+0

这不会很好,因为我想与其中的一个表进行对话..但如果我找不到其他东西,这是一个可能的解决方案:) – PJDW 2014-10-09 11:58:09

+0

如果您在对话框中需要这个,使用局部视图而不是视图。 – Zabavsky 2014-10-09 11:59:30