Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在发送一封电子邮件时,如何操作类中的属性列表?_C#_Asp.net Mvc 4_Razor - Fatal编程技术网

C# 在发送一封电子邮件时,如何操作类中的属性列表?

C# 在发送一封电子邮件时,如何操作类中的属性列表?,c#,asp.net-mvc-4,razor,C#,Asp.net Mvc 4,Razor,我试图在使用购物车的应用程序(MVC4)中实现订单确认。 我正处于向客户和管理员用户发送电子邮件以确认订单的阶段。 我想为一个订单(购物车)发送一封电子邮件。 我的手推车课 我有一个购物车模型: namespace MerchandiseProject.Domain.Entities { public class Cart { private List<CartLine> lineCollection = new List<Cart

我试图在使用购物车的应用程序(MVC4)中实现订单确认。 我正处于向客户和管理员用户发送电子邮件以确认订单的阶段。 我想为一个订单(购物车)发送一封电子邮件。 我的手推车课

我有一个购物车模型:

  namespace MerchandiseProject.Domain.Entities
 {
      public class Cart
      {
        private List<CartLine> lineCollection = new List<CartLine>();

        public void AddItem(Product product, int quantity) 
        {
        CartLine line = lineCollection
        .Where(p => p.Product.ProductID == product.ProductID)
        .FirstOrDefault();
            if (line == null)
            {
                lineCollection.Add(new CartLine { Product = product,
                Quantity = quantity });
            }
        else 
            {
                line.Quantity += quantity;
            }
       }

        public void RemoveLine(Product product)
        {
            lineCollection.RemoveAll(l => l.Product.ProductID == product.ProductID);
        }

        public decimal ComputeTotalValue()
        {
            return lineCollection.Sum(e => e.Product.Price * e.Quantity);
        }

        public void Clear()
        {
            lineCollection.Clear();
        }

        public IEnumerable<CartLine> Lines 
        {
            get { return lineCollection; }
        }

     }

      public class CartLine
      {
          public Product Product { get; set; }
          public int Quantity { get; set; }
      }
  }

请注意-asp.net MVC 4使用razor视图。

正如@DStanley所说,您实际上是说通过在foreach循环中使用您的
MailController
行来为每一行项目发送电子邮件。如果问题是您需要访问foreach循环上下文之外的
model
,那么您需要将其保存在父范围中的变量中。例如:

var lineItems = new List<Order>();
foreach (var line in cart.Lines)
{
    lineItems.Add(new Order
    {
        ...
    });
}

完全消除对
foreach
的需要。

将对
Mailcontroller
的调用移出
foreach
循环?如果我这样做,var模型不会被拾取?因此,将上述的foreach和var模型代码替换,并将Mailcontroller行中的模型替换为。。。?如果我插入“LineItems”,我需要更改OrderDetailsMail以接受IEMunarable??这就是所有的实现细节。这里的想法是,你确实有很多“东西”想要传递到你的电子邮件中。但是,您可以重新构造代码,使某个类包含行项可枚举,然后只传入该单个对象,或者是的,您可以更改电子邮件功能的工作方式,但这完全取决于您和您的应用程序的需要。更改越少越好,我不确定我是否完全理解最后的注释。。。。为了将订单模型传递给Mailcontroller,关键是没有人能为您回答这个问题。您想知道如何不为每一行项目发送电子邮件,而只为整个订单发送一封。您已经有了答案:将电子邮件发送代码移到循环上下文之外(其中范围是单个行项目),并移到所有行项目都可用的范围中。如何使用这些数据以及代码可能采用的确切形式取决于您,不在本问题的范围之内。
  [HttpPost]
    public ViewResult Checkout(Cart cart, ShippingDetails shippingDetails)
    {
        var CurrentUser = HttpContext.User;
        string currentUserName = CurrentUser.Identity.Name;
        if (cart.Lines.Count() == 0)
        {
            ModelState.AddModelError("", "Sorry, your cart is empty!");
        }
        if (ModelState.IsValid)
        {
            foreach (var line in cart.Lines)
            {
                var model = new Orders()
                {
                    ProductName = line.Product.Name,
                    ProductUnitPrice = line.Product.Price,
                    Quantity = line.Quantity,
                    OrderTotal = line.Quantity * line.Product.Price,
                    UserName = currentUserName,
                    Name = shippingDetails.Name,
                    Line1 = shippingDetails.Line1,
                    Line2 = shippingDetails.Line2,
                    Line3 = shippingDetails.Line3,
                    City = shippingDetails.City,
                    State = shippingDetails.State,
                    Country = shippingDetails.Country,
                    GiftWrap = shippingDetails.GiftWrap,
                    OrderDate = DateTime.Now,
                    Zip = shippingDetails.Zip,
                };
                new MailController(_actionMailer).OrderDetailsEmail(model).Deliver();
            }
            orderProcessor.SaveOrder(currentUserName ,cart, shippingDetails);
            cart.Clear();
            return View("Completed");
        }
        else
        {
            return View(shippingDetails);
        }
    }
var lineItems = new List<Order>();
foreach (var line in cart.Lines)
{
    lineItems.Add(new Order
    {
        ...
    });
}
var lineItems = cart.Lines.Select(m => new Order
{
    ProductName = m.Product.Name,
    ...
});