2015-07-22 2 views
0

Я работаю над сайтом для кого-то, и у меня есть небольшая проблема. Я признаю, что я немного новичок в MVC и EF, поэтому у меня есть эта проблема. В моем представлении «Индекс» отображаются мои продукты, но они отображаются в прямом и нижнем списке, как и таблица, которую я создал, которую он должен был делать.Создание галереи продуктов с EF 6 и MVC 5

То, что я пытаюсь сделать, это создать галерею, где они бок о бок, скажем 4 подряд, а затем перейти к следующей строке и так далее (Бог, я знаю, это имеет смысл). Вот мой взгляд

@model IEnumerable<AccessorizeForLess.ViewModels.DisplayProductsViewModel> 

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

<h2>Index</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table class="table"> 
    @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Name)<br /> 
       <img src="@item.Image.ImagePath"/> 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Price) 
      </td> 
      <td> 
       @Html.ActionLink("Edit", "Edit", new { id = item.Id }) | 
       @Html.ActionLink("Details", "Details", new { id = item.Id }) | 
       @Html.ActionLink("Delete", "Delete", new { id = item.Id }) 
      </td> 
     </tr> 
    } 

</table> 

И, конечно же, он делает то, что должен делать. Может ли кто-нибудь помочь мне с этим?

+1

Рассмотрим с помощью div с 'float: left;' и 'width: 25%' –

+0

@StephenMuecke Я хотел бы поблагодарить вас за вашу помощь за последние пару дней. Это много значит, когда я могу получить помощь, изучая входы и выходы MVC. – PsychoCoder

+0

Удовольствие. Я предполагаю, что вы это проработали, но [здесь есть упрощенная скрипка] (http://jsfiddle.net/7vkc8myy/), показывающая, что вы можете сделать. –

ответ

0

В случае, если кто имеет что-нибудь близко к этому вопросу, это то, что я придумал, и это работает именно так, как я искал:

@model IEnumerable<AccessorizeForLess.ViewModels.DisplayProductsViewModel> 

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

<h2>Products</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
    @foreach (var item in Model) 
    { 
     <div style="float:left; width:25%"> 
      @Html.DisplayFor(modelItem => item.Name)<br /> 
      <input id="Hidden1" type="hidden" value="@item.Id" /> 
      <div>[email protected](modelItem => item.Price)</div> 
      <div><img src="@item.Image.ImagePath" /></div> 
      <div>&nbsp;</div> 
      <div>Quantity: <input type="text" id="quantity" style="width:50px;" /></div> 
      <div>@Html.ActionLink("Details", "Details", new { id = item.Id })</div> 
     </div> 
    } 

Я, однако есть один вопрос, на мой контроллер хау я могу форматировать цену, как валюты, я попытался это:

IEnumerable<DisplayProductsViewModel> model = products.Select(p => new DisplayProductsViewModel() 
{ 
    Id = p.ProductId, 
    Name = p.ProductName, 
    Image = p.ProductImage, 
    Price = string.Format("{0:C}",p.ProductPrice) 
}).ToList(); 

И получаю ошибку:

LINQ to Entities does not recognize the method 'System.String Format(System.String, System.Object)' method, and this method cannot be translated into a store expression

+1

Вы не должны форматировать значение в запросе, а скорее добавить '[DisplayFormat (DataFormatString =" {0: C} ")]' к свойству. Затем помощник '@ Html.DisplayFor()' корректно отображает его (удаляет ведущий '$' в вашем коде просмотра) –

+0

Обратите внимание, что '' и '

Quantity:
' генерирует недопустимый html (дубликаты атрибутов id). В любом случае его непонятно, почему у вас это есть, поскольку у вас нет формы (и если вы это сделаете, это никогда не будет привязываться к вашей модели при публикации в любом случае) –

+0

Также настоятельно рекомендуем использовать таблицы стилей, а не встроенные стили (см. скрипту, с которой я связан выше. –

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