2012-07-20 3 views
2

В моем проекте MVC4 у ​​меня есть модель просмотра категорий с коллекцией моделей вида продукта. Я использую редактор шаблонов, чтобы сделать единую модель представления продукта, и передать коллекцию зрения продукта моделей к нему:Как связать поля с нокаутом в шаблоне редактора в MVC4?

Категория вид модели:

@model CategoryViewModel 
@using MVC4PartialViews.Models.ViewModels 

<div class="editor-field"> 
    @Html.EditorFor(model => model.CategoryName) 
    @Html.ValidationMessageFor(model => model.CategoryName) 
</div> 

@Html.EditorFor(x => x.Products) 

Редактор шаблонов, что делает каждый продукт в коллекции:

<div class="editor-field"> 
    @Html.EditorFor(model => model.ProductName) 
    @Html.ValidationMessageFor(model => model.ProductName) 
</div> 
// etc. 

Это работает очень хорошо, как это автомагически имена и индексы элементов правильно, чтобы все продукты публиковались назад в рамках модели представления родитель Категория - вот что она выводит:

<div class="editor-field"> 
    <input class="text-box single-line" id="Products_0__ProductName" name="Products[0].ProductName" type="text" value="Add 1st product for this Category" /> 
    <span class="field-validation-valid" data-valmsg-for="Products[0].ProductName" data-valmsg-replace="true"></span> 
</div> 

Как связать поля в шаблоне редактора с нокаутом? Могу ли я каким-либо образом получить доступ или использовать значение индекса, которое использует шаблон редактора для обозначения элементов? Я не могу связать полей никаких проблем в родительском (категория) модели представления, как показано ниже:

<script> 
    window.defaultCategory = @Html.Raw(Json.Encode(Model)); 
</script> 

@Html.TextBoxFor(
    model => model.CategoryName, 
    new Dictionary<string, object> 
    { 
     {"style", "width: 30%;"}, 
     {"placeholder", "Please enter the Category name"}, 
     { "data-bind", "value: currentCategory.CategoryName" } 
    }) 

я должен был бы произвести что-то вроде этого, где [п] значение индекса производится с помощью редактора шаблонов, как это делает каждый продукт в коллекции продуктов:

{ "data-bind", "value: currentCategory.Products[n].ProductName" } 

или это будет так:

{ "data-bind", "value: currentCategory.Products()[n].ProductName" } 

Все помощь или идеи оценили :)

ответ

1

Вы можете извлечь текущий индекс из TemplateInfo:

@model ProductViewModel 

<div class="editor-field">  
    @Html.TextBoxFor(
     model => model.ProductName, 
     new { 
      style = "width: 30%;", 
      placeholder = "Please enter the Category name", 
      data_bind = string.Format(
       "value: currentCategory.{0}.ProductName", 
       ViewData.TemplateInfo.HtmlFieldPrefix 
      ) 
     } 
    ) 
    @Html.ValidationMessageFor(model => model.ProductName) 
</div> 
+0

Отлично! Не знакомы с ViewData.TemplateInfo, необходимо прочитать об этом. –

Смежные вопросы