C# 在发送一封电子邮件时,如何操作类中的属性列表?
我试图在使用购物车的应用程序(MVC4)中实现订单确认。 我正处于向客户和管理员用户发送电子邮件以确认订单的阶段。 我想为一个订单(购物车)发送一封电子邮件。 我的手推车课 我有一个购物车模型: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
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,
...
});