2014-10-09 111 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