2016-09-19 8 views
-1

У меня есть строго типизированный вид типа IEnumerable<MVC.Models.Product>. Я получаю нулевые значения, когда я перебираю IEnumerable в контроллере.IEnumerable View имеет нулевое значение в контроллере

Посмотреть

@model IEnumerable<MVC.Models.Product> 
    <h2>Product</h2> 
    @foreach (var item in Model) 
    { 

     using (Html.BeginForm("AddToCart", "Home")) 
     { 
       @Html.DisplayFor(modelItem => item.ProductID) 
      <div> 
       @Html.DisplayFor(modelItem => item.ProductName) 
      </div> 
      <div> 
       @Html.DisplayFor(modelItem => item.ProductVendor) 
      </div> 
      <div> 
       @Html.DisplayFor(modelItem => item.ProductDesc) 
      </div> 
      <div> 
       @Html.DisplayFor(modelItem => item.productPrice) 
      </div> 
      <div> 
       @Html.TextBox("Quant") 
      </div> 
      <div> 
       <button type="submit" value="Add to cart">Add to cart</button> 
      </div> 
     } 

    } 

Контроллер

 public ActionResult Index(int? page) 
    { 
     using (AutoPartsSystemEntities3 db = new Models.AutoPartsSystemEntities3()) 
     { 
      var Query = db.Products; 
      int pageSize = 3; 
      int pageNumber = (page ?? 1); 
      return View(Query.OrderBy(e => e.ProductName).ToPagedList(pageNumber,pageSize)); 
     } 

    } 

    public ActionResult Product(int id) 
    { 
     using (AutoPartsSystemEntities3 db = new AutoPartsSystemEntities3()) 
     { 
      var Query = (from p in db.Products 
         where p.ProductID == id 
         select p).ToList(); 

      return View(Query); 
     } 
    } 
    [HttpPost] 
    public ActionResult AddToCart(IEnumerable<Product> p, int Quant) 
    { 
     double TotalPrice = 0; 
     int ProductID = 0; 
     foreach (Product pro in p) 
     { 
      TotalPrice = pro.productPrice * Quant; 
      ProductID = pro.ProductID; 
     } 
     using (AutoPartsSystemEntities8 db = new AutoPartsSystemEntities8()) 
     { 
      db.Carts.Add(new Cart { ProductId = ProductID, CheckOut = false, DateCreated = DateTime.Now, Price = (float)TotalPrice, Quantity = Quant, UserId = 1 }); 
      db.SaveChanges(); 

     } 
     return RedirectToAction("Index", "Home"); 
    } 

Продукт класса

public partial class Product 
{ 
    public int ProductID { get; set; } 
    public string ProductName { get; set; } 
    public string ProductVendor { get; set; } 
    public string ProductDesc { get; set; } 
    public double productPrice { get; set; } 
} 
+0

Получаете ли вы значение null в действии GET или в POST (функция, которую вы отправили)? На ваш взгляд, вы создаете множество форм. –

+0

@KirkWoll Я добавил контроллер индекса – aj12

+0

@RoelantM в действии POST – aj12

ответ

0

Каждая форма отправки обратно один MVC.Models.Product, а не коллекция (IEnumerable). Попробуйте:

[HttpPost] 
public ActionResult AddToCart(Product p, int Quant) 

И modfiy контроллер, чтобы исправить факт, что вы сохраняете только один продукт за раз.

и добавить:

@Html.HiddenFor(modelItem => item.ProductID) 

под Displayfor для него так вывешивает назад.

+0

Я пробовал это во-первых, но он хранит 0 в базе данных – aj12

+0

А, я вижу. Правильно, что вы3. Я отредактировал код так, чтобы ваш productId был отправлен обратно на контроллер. –

+0

Он все еще не работает. – aj12

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