C#使用带有枚举的If语句
本文关键字:If 语句 枚举 | 更新日期: 2024-09-27 02:12:31
我希望根据从枚举器的下拉列表中选择的选项显示不同的viewbag消息,但我不知道如何做到这一点。我使用一个视图模型并通过控制器传递数据,这里是viewmodel和类,解释了如何使用带有ViewModels/Enumerator的if语句将非常有益。我尝试过分配变量,但我意识到我所做的只是说THIS is THIS,所以这不会从Orders Postage枚举中获得数据。感谢任何帮助和解释,仍在学习中。
ViewModel;
{
public class MyOrdersViewModel
{
public int OrderId { get; set; }
public System.DateTime OrderDate { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
public decimal Total { get; set; }
public bool HasBeenShipped { get; set; }
public Postage? PostageList { get; set; }
public List<MyOrderDetails> Details { get; set; }
}
public class MyOrderDetails
{
public string Title { get; set; }
public string Colour { get; set; }
public int Quantity { get; set; }
public decimal UnitPrice { get; set; }
}
}
控制器;
public ActionResult Index(Order order)
{
string currentUser = this.User.Identity.GetUserName();
List<T_shirt_Company_v3.ViewModels.MyOrdersViewModel> list = (from o in new TshirtStoreDB().Orders
.Where(o => o.Username == currentUser)
.OrderByDescending(o => o.OrderDate)
.Select(o => new MyOrdersViewModel()
{
OrderId = o.OrderId,
Address = o.Address,
FirstName = o.FirstName,
LastName = o.LastName,
City = o.City,
OrderDate = o.OrderDate,
PostalCode = o.PostalCode,
Total = o.Total,
HasBeenShipped = o.HasBeenShipped,
PostageList = o.PostageList,
Details = (from d in o.OrderDetails
select new MyOrderDetails
{
Colour = d.Product.Colour,
Quantity = d.Quantity,
Title = d.Product.Title,
UnitPrice = d.UnitPrice
}).ToList()
}).ToList()
select o).ToList();
//@ViewBag.PostageStatus
//ViewBag.ShippedMessage = list.Where(w => w.HasBeenShipped).Any() ? "Order has been shipped" : "Order is being processed";
Postage value = Postage.FirstClass;
Postage value2 = Postage.StandardDelivery;
Postage value3 = Postage.TwentyFourHour;
if (value == Postage.FirstClass)
{
ViewBag.PostageStatus = ("First Class");
}
else
{
ViewBag.PostageStatus = (" Error ");
}
if (value2 == Postage.StandardDelivery)
{
ViewBag.PostageStatus = ("Standard Delivery");
}
if (value3 == Postage.StandardDelivery)
{
ViewBag.PostageStatus = ("24 hour delivery");
}
return View(list);
}
订单类别
namespace T_shirt_Company_v3.Models
{
//[Bind(Exclude = "OrderId")]
public partial class Order
{
[ScaffoldColumn(false)]
public int OrderId { get; set; }
[ScaffoldColumn(false)]
public System.DateTime OrderDate { get; set; }
[ScaffoldColumn(false)]
[Remote("CheckUserName", "Account")]
public string Username { get; set; }
[Required]
[StringLength(16, ErrorMessage = "Your name is too long")]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Your last name is required.")]
[StringLength(16, ErrorMessage = "Last name is too long.")]
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Required(ErrorMessage = "Address is required.")]
public string Address { get; set; }
[Required(ErrorMessage = "City is required.")]
public string City { get; set; }
[Required(ErrorMessage = "Postcode is required.")]
[Display(Name = "Post Code")]
public string PostalCode { get; set; }
[Required(ErrorMessage = "Country is required.")]
public string Country { get; set; }
[Required(ErrorMessage = "Phone number is required.")]
public string Phone { get; set; }
[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+'.[A-Za-z]{2,4}", ErrorMessage = "Email doesn't look like a valid email address.")]
public string Email { get; set; }
[System.ComponentModel.DataAnnotations.Compare("Email")]
[Display(Name = "Confirm your email address")]
public string EmailConfirm { get; set; }
[ScaffoldColumn(false)]
public string PaymentTransactionId { get; set; }
[ScaffoldColumn(false)]
public bool HasBeenShipped { get; set; }
[ScaffoldColumn(false)]
//[ReadOnly(true)]
public decimal Total { get; set; }
[Required]
[Range(0, 2, ErrorMessage = "Select a delivery method")]
public Postage? PostageList { get; set; }
public CardDetails cardDetails { get; set; }
//public List<CardDetails> cardDetails { get; set; }
public List<OrderDetail> OrderDetails { get; set; }
}
public enum Postage {[Display(Name = "Standard Delivery - Free")]StandardDelivery, [Display(Name = "First Class Delivery - £4.99")]FirstClass, [Display(Name = "24 Hour Delivery - £9.99")]TwentyFourHour }
}
为什么不简单地在enum
上使用switch
语句?也许误解是该类型可以为null。使用nullables,您可以在返回enum
值时调用.GetValueOrDefault
,然后调用switch
。
switch (order.Postage.GetValueOrDefault())
{
case Postage.StandardDelivery:
ViewBag.PostageStatus = "Standard Delivery";
break;
case Postage.FirstClass:
ViewBag.PostageStatus = "First Class";
break;
case Postage.TwentyFourHour:
ViewBag.PostageStatus = "24 hour delivery";
break;
default:
ViewBag.PostageStatus = "Error";
break;
}
这防止了if
语句的使用,并简化了用户的可读性。