【发布时间】:2013-12-02 10:05:00
【问题描述】:
我正在使用 MVC 4 在 C# 中为我的项目创建一个购物车。
我在会话中存储了 3 个值:名称、价格和描述作为数组。
当我尝试为 foreach 循环调用 Session 时,它说
“foreach 语句不能对 'object' 类型的变量进行操作,因为 'object' 不包含 'GetEnumerator' 的公共定义”
我必须改变什么?
任何帮助将不胜感激。
谢谢
Courses.cshtml
@model IEnumerable<ANON_Capstone.Models.Course>
@if (!User.Identity.IsAuthenticated)
{
@section featured
{
<section class="featured">
<div class="content-wrapper">
<h2 class="text-center">Please Login or Create an Account to make a Purchase!</h2>
</div>
</section>
}
}
<div class="row">
<div class="col-lg-9">
<h2><strong>Courses</strong></h2><br />
@foreach (var item in Model)
{
<div class="col-md-4 col-xs-6 col-s-8 col-lg-4">
@using (Html.BeginForm("ShoppingCart", "Home"))
{
<img src="~/Images/party.gif" style="width: 175px" class="img-responsive" />
<h2>@item.className</h2>
<p>$@item.classPrice -- @item.maxStudent spots left! </p>
<input type="text" name="product" value="@item.className" hidden="hidden" />
<input type="text" name="totalPrice" value="@item.classPrice" hidden="hidden" />
<input type="text" name="custom" value="@item.ClassID" hidden="hidden" />
if (User.Identity.IsAuthenticated)
{
<input class="btn btn-default" type="submit" name="btnConfirm" value="Add to Shopping Cart" />
}
}
<br />
</div>
}
</div>
</div>
HomeController.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ANON_Capstone.Models;
namespace ANON_Capstone.Controllers
{
public class HomeController : Controller
{
private UsersContext db = new UsersContext();
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
return View();
}
public ActionResult Contact()
{
return View();
}
public ActionResult Courses()
{
return View(db.Courses.ToList());
}
[HttpPost]
public ActionResult ShoppingCart()
{
return View();
}
public ActionResult ShoppingCart(string className, string classPrice, string classDesc)
{
String[] cart = { className, classPrice, classDesc };
Session["Cart"] = cart;
return View();
}
}
}
ShoppingCart.cshtml
@{
ViewBag.Title = "ShoppingCart";
}
<h2>ShoppingCart</h2>
@using (Html.BeginForm("ValidateCommand", "PayPal"))
{
var cart = Session["Cart"];
<div class="row">
<div class="col-lg-9">
<h2><strong>Courses</strong></h2><br />
<div class="col-md-4 col-xs-6 col-s-8 col-lg-4">
@foreach (var item in cart)
{
<img src="~/Images/party.gif" style="width: 175px" class="img-responsive" />
<h2>@item.className</h2>
<input type="text" name="product" value="@item.className" hidden="hidden" />
<input type="text" name="totalPrice" value="@item.classPrice" hidden="hidden" />
<input type="text" name="custom" value="@item.ClassID" hidden="hidden" />
}
<br />
</div>
</div>
<input class="btn btn-default" type="submit" name="btnConfirm" value="Check Out with Paypal" />
</div>
}
【问题讨论】:
-
首先您是如何在会话中存储购物车项目的?是清单吗?这个错误很容易解释..你从会话中拉出一个
object..object不是IEnumerable.. -
@SimonWhitehead 嗨,西蒙,我正在通过控制器传递模型中的变量。控制器采用 3 个参数,即名称、价格和描述。然后,我创建了三个对象的字符串数组并将其存储到 Session 中。
-
如果它是一个字符串数组..那么你需要把它作为一个来投射。我会在答案中告诉你。
-
您拥有的是一个购物车项目,但鉴于您正试图将其作为收集订单访问。
-
@evhen14 我必须做什么才能将其作为集合访问?我必须将会话对象转换为集合吗?还是创建多个会话?
标签: c# asp.net-mvc-4 session foreach