2016-08-30 6 views
0

У меня есть вид с перечислимой моделью. Я пытаюсь связать текстовые поля со значением экземпляра объекта. Вот мое мнение.Перечислимый вид со связанными текстовыми полями

@model IEnumerable<SeniorProjectMVC.Models.Cart> 

@{ 
    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h3>Your cart</h3> 

@*<p> 
    @Html.ActionLink("Create New", "Create") 
</p>*@ 

<div class="row"> 
    <div class="large-2 columns"> 
     <h4> @Html.DisplayNameFor(model => model.Quantity)</h4> 
    </div> 
    <div class="large-4 columns"> 
     <h4>@Html.DisplayNameFor(model => model.Sku.Product.Name)</h4> 
    </div> 
    <div class="large-2 columns"> 
     <h4>@Html.DisplayNameFor(model => model.Sku.Product.Price)</h4> 
    </div> 
    <div class="large-1 columns"> 
     <h4>In stock</h4> 
    </div> 
    <div class="large-3 columns"> 

    </div> 
</div> 

@foreach (var item in Model) 
{ 
    <div class="row"> 
     <div class="large-2 columns"> 
      @Html.TextBox(item.Quantity.ToString()) 
     </div> 
     <div class="large-4 columns"> 
      @Html.Display(item.Sku.Product.Name) 
     </div> 
     <div class="large-2 columns"> 
      @(item.Sku.Product.Price.ToString("c")) 
     </div> 
     <div class="large-1 columns"> 
      @(item.Sku.Quantity > 0 ? "In Stock" : "Out of stock") 
     </div> 
     <div class="large-3 columns"> 
      @Html.ActionLink("Edit", "Edit", new { id = item.ID }, new { @class = "button primary" }) | 
      @Html.ActionLink("Details", "Details", new { id = item.ID }, new { @class = "button primary" }) | 
      @Html.ActionLink("Delete", "Delete", new { id = item.ID }, new { @class = "button primary" }) 
     </div> 
    </div> 
} 

вопрос я, кажется, впал в том, что количество не будет заполнить в текстовом поле, и кажется, что название продукта также не отображаются. Я знаю, что имена продуктов имеют значения, но они не отображаются. Кроме того, если бы я захотел опубликовать эту коллекцию в случае изменения значения, то верный способ опубликовать все значения текстового поля с их соответствующими идентификаторами, чтобы я мог обновлять количества в корзине, которые изменились.

+1

Вы уверены, что каждый элемент имеет действительное значение в свойстве 'Quantity'? – Shyju

+0

Да, я могу опубликовать фотографию. Цена кажется правильно привязанной, но количество не заполняется в текстовых окнах, и имя каждого продукта также не отображается. – ddeamaral

+0

Может быть, вам нужно использовать 'Include' при чтении его из dbContext. – Shyju

ответ

0

Итак, после некоторых проб и ошибок я обнаружил, что проблема связана с неправильной перегрузкой HTML-хелпера. @ Html.TextBox («Количество», item.Quantity) - это правильный способ вывода значения, а для имени - то, что сработало для меня, - это сделать (item.Sku.Product.Name).

+0

Для публикации коллекции вы не можете использовать цикл foreach. См. [Этот ответ] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943#30094943) (и правильное использование вашей текущей реализации, которая не будет работать, был '@ Html.TextBoxFor (m => item.Quantity)' - всегда используйте строго типизированные методы HtmlHelper) –

+0

Итак, с моей текущей разметкой не существует способа опубликовать мои количества и идентификатор sku для каждой позиции в моей корзине моему контроллеру? – ddeamaral

+0

Нет. Посмотрите на html ваш генератор - у вас есть дублирующие атрибуты 'name' без индексаторов, которые необходимы для привязки к коллекции (и дублируют атрибуты id), которые являются недопустимыми html) - ссылайтесь на ссылку в моем предыдущем комментарии. –

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