2015-01-07 3 views
2

Я следующий кодДоступ к IEnumerable Список значений

@model IEnumerable<Shop_Online.com.Models.Product> 
<style type="text/css"> 
#Total_Products 
{ 
    width:20px; 
    margin-left:10px; 
} 
</style> 
@using (Html.BeginForm()) 
{ 
<div style="width: 860px; margin: 0 auto" class="main"> 
    <table border="1" style="font-family: Verdana; font-size: 13px"> 
     <tr style="background-color: #f2f2f2;height:30px"> 
      <th colspan="4">ITEM</th> 
      <th>DELIEVERY DETAILS</th> 
      <th>QTY</th> 
      <th>SUB TOTAL</th> 
      <th>Remove Items</th> 
     </tr> 
     @foreach (var item in Model) 
     { 
      <tr> 
       <td colspan="4" style="width: 46%"> 
        <table style="font-family: Verdana; font-size: 13px"> 
         <tr> 
          <td> 
           <img src="@Url.Content(item.Photo)" alt="Image" style="width:36px" /> 
          </td> 
          <td> 
           @Html.DisplayFor(x => item.Model_Name) 
          </td> 
         </tr> 
         <tr> 
          <td style="color: #ccc">30 days Replacement</td> 
         </tr> 
        </table> 
       </td> 
       <td style="width: 39%">Free Delievery Delivered in 2-3 business days.</td> 
       <td style="width: 5%">@Html.TextBox("Total_Products",1)</td> 
       <td style="width: 50%"><b>Rs. @Html.DisplayFor(x => item.Price)</b></td> 
       <td><button type="submit" class="remove" value="@item.Id" id="@item.Id" name="Action">Remove</button></td> 
      </tr> 
     } 
    </table> 
    <div style="width: 100%; height: 70px; background-color: #f2f2f2"> 
     <div style="width: 75%; height: 70px; float: left; font-family: Verdana; font-size: 13px"> 
     </div> 
     <div style="width: 25%; height: 70px; float: left; font-family: Verdana; padding-top: 20px; font-size: 13px"> 
      Estimated Price: <b>[email protected]</b> 
     </div> 
    </div> 
    <div class="order" style="width: 100%; height: 70px"> 
     <div class="left-order" style="width: 75%; height: 70px; float: left"></div> 
     <div class="left-order" style="width: 25%; float: left; height: 70px"> 
      <input type="submit" name="Action" value="PLACE ORDER" style="border: 1px solid #ec6723; width: 216px; cursor: pointer; height: 45px; color: #fff; background: -webkit-linear-gradient(top,#f77219 1%,#fec6a7 3%,#f77219 7%,#f75b16 100%)" /> 
     </div> 

    </div> 
</div> 

}

А вот контроллер

public ActionResult Order(IEnumerable<Product> products, string Action) 
    { 
     if (Action == "PLACE ORDER") 
     { 
     //some code here 
    } 

Объект продукта

public partial class Product 
{ 
    public int Id { get; set; } 
    public string Model_Name { get; set; } 
    public string Company_Name { get; set; } 
    public Nullable<int> Price { get; set; } 
    public string Photo { get; set; } 
    public string Big_Photo { get; set; } 
    public string AlternateText { get; set; } 
    public string Model_FullName { get; set; } 
    public Nullable<int> Product_Id { get; set; } 
    public string Video_record { get; set; } 
    public string second_camera { get; set; } 
    public string primary_camera { get; set; } 
    public string touch_screen { get; set; } 
    public string operating_sys { get; set; } 
    public string warranty { get; set; } 
    public Nullable<int> Company_Id { get; set; } 
    public Nullable<int> Total_Products { get; set; } 
} 

Я получаю нулевой когда я пытаюсь o получить доступ к значениям IEnumerable. Я получаю значение для переменной Action. Я даже пытался использовать цикл, но все равно он не работает. Я могу показать. Это то, что я прошу, но я пробовал искать вещи в Google, но не смог исправить свою ошибку. Может ли кто-нибудь рассказать мне, как исправить вышеуказанный код. Благодаря

+0

Вы не можете найти продукт? Вы пробовали использовать хром-консоль? –

+0

@NachoLaborde не могли бы вы сообщить мне, где это происходит Неправильно – User

+0

Сделайте модель 'IList ' и используйте цикл 'for' с сильно типизированными помощниками -' for (int i = 0; i m.Total_Products) ...} ' –

ответ

1

Для того, чтобы по умолчанию MVC модели механизма для recognize a collection of entities связывания представляется формой в POST, вы должны убедиться, что имена полей имеют бегущий индекс на основе нуля в атрибуте элементов Html name которые размещены на контроллер, например:

@for (var i = 0; i < 10; i ++) 
{ 
    <input type='text' name="products[@i].ProductId"/> 
    <input type='text' name="products[@i].Total_Products"> 
    <br> 
} 

у вас есть несколько других вариантов:

  1. Создайте массив JSON элементов формы, а затем разместить массив в контроллер через AJAX
  2. Вы можете придумать свой собственный механизм присвоения имен, а затем либо разобрать FormCollection вручную, или создать пользовательскую модель связующего

Как и в сторону, вы можете изменить имя вашей Action переменной, чтобы избежать путаницы с Linq Action delegate

+0

AFAIK вы не можете переопределить' имя' элемента через [HtmlHelpers] (http://stackoverflow.com/questions/ 10538456/mvc-set-name-attribute-w-helper) – StuartLC

+0

Можете ли вы предложить мне пример построения Json Array. Я попытался использовать цикл @for. но никакого результата. Спасибо alte – User

+0

@User, Если ваш цикл 'for' не работает, то вы делаете что-то еще не так - отредактируйте свой вопрос с помощью кода, используемого вами. –

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