2014-10-09 9 views
0

Я хочу использовать (загрузочный) модальный, чтобы показать перевод, но он дает неправильное имя. В исходном коде браузера отображается NameTranslations. [0] .Translatio n пока он должен быть NameTranslations [0]. Трансляция (без точки между NameTranslation и [i]).MVC Введите имя неправильное

Некоторые код:

Views/Shared/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"]; 
} 

Частичный вид: Просмотров/Shared/_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 (м => Model [я] .Translation, новый {имя = Model [я] .Translation}) Но результат тот же – PJDW

+0

Затем попытайтесь присвоить значение в локальный переменная или фрейм значение локальной переменной в соответствии с вашим требованием. Подобно var tempName = Model [i] .Translation или tempName = Model [i] .Translation + "_" + i и присвойте tempName атрибуту name.If все еще не работает отредактируйте значение во время выполнения и посмотрите, назначено ли редактируемое значение или нет. – Oasis

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") 
} 
+0

Это не будет работать отлично, потому что я хочу сделать диалог со своей таблицей. Но это возможное решение, если я не найду ничего другого :) – PJDW

+0

Если вы нужно это в диалоговом окне, используйте частичный вид вместо представления. – Zabavsky