2014-09-03 97 views
-3

我想投一个枚举为int值,存在投枚举在我的服务,它看起来像这样如何投放枚举INT

public Dictionary<int, string> GetWorkingDays() 
    { 
     var days = typeof(WorkDays).ToSelectList(); 
     return days; 
    } 

到seletListItem的扩展,然后我就回到我的看法使用这样

ViewBag.WorkingDays = _vendorService.GetWorkingDays().Select(x => new SelectListItem { Value = x.Key.ToString(), Text = x.Value }); 

查看购物袋现在当枚举的一个是从视图中选择它int值返回到我的控制器我怎么能强制转换的int我的服务initialisations ...

谢谢你您的时间,请

这是我的服务

public int AddVendor(string companyname, string addressOne, string addressTwo, string city, string state, string country, string phone, string email, int workingDays) 
    { 
     var vendor = new Vendor() 
     { 
      CompanyName = companyname, 
      AddressLineOne = addressOne, 
      AddressLineTwo = addressTwo, 
      City = city, 
      State = state, 
      Country = country, 
      Phone = phone, 
      Email = email, 
      IsActive = true, 
      RegistrationDate = DateTime.Now 
      WorkingDays = //casting here to collect the parameter (int workingDays) 
     }; 
     _unitOfWork.VendorRepository.Insert(vendor); 
     _unitOfWork.VendorRepository.Save(); 

     return vendor.Id; 
    } 

这里是枚举

public enum WorkDays 
{ 
    EveryDay, MondayToFriday, MondayToSaturday, FridayToSunday, SaturdayAndSunday 
} 

这是控制器

[HttpPost] 
    public ActionResult Create(VendorViewModel model) 
    { 
     // 
     if (!ModelState.IsValid) 
     { 
      ViewBag.WorkingDays = _vendorService.GetWorkingDays().Select(x => new SelectListItem { Value = x.Key.ToString(), Text = x.Value }); 
      ViewBag.Error = false; 
      return View(model); 
     } 

     var vendor = _vendorService.AddVendor(model.CompanyName, model.AddressLineOne, model.AddressLineTwo, model.City, model.State, model.Country,model.OpeningTime,model.ClosingTime, model.Phone, model.Email, model.WorkingDays); 
     if (vendor != 0) 
     { 
      _vendorService.AddVendorContact(model.FirstName, model.LastName, model.MobileNumber1, model.MobileNumber2, model.EmailAddress, vendor); 
     } 

     return RedirectToAction("Index"); 


    } 

我的模型

public class Vendor : BaseDataObject 
{ 
    public string CompanyName { get; set; } 
    public string AddressLineOne { get; set; } 
    public string AddressLineTwo { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Country { get; set; } 
    public string Phone { get; set; } 
    public string Email { get; set; } 
    public DateTime RegistrationDate { get; set; } 
    public bool IsActive { get; set; } 
    public string OpeningTime { get; set; } 
    public string ClosingTime { get; set; } 
    public WorkDays WorkingDays { get; set; } 

} 

public enum WorkDays 
{ 
    EveryDay, MondayToFriday, MondayToSaturday, FridayToSunday, SaturdayAndSunday 
} 

那么这是视图模型

public class VendorViewModel 
{ 
    [Required] 
    [DisplayName("Company Name")] 
    public string CompanyName { get; set; } 
    [Required] 
    [DisplayName("Address Line One")] 
    public string AddressLineOne { get; set; } 
    [DisplayName("Address Line Two")] 
    public string AddressLineTwo { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Country { get; set; } 
    [Phone] 
    public string Phone { get; set; } 
    [EmailAddress(ErrorMessage = "Invalid E-Mail Address")] 
    [Required] 
    public string Email { get; set; } 
    [DisplayName("Opening Time")] 
    public string OpeningTime { get; set; } 
    [DisplayName("Closing Time")] 
    public string ClosingTime { get; set; } 
    [DisplayName("Working Days")] 
    public int WorkingDays { get; set; } 
} 
+0

你有任何与此谷歌? – 2014-09-03 09:11:00

+0

默认情况下,'enum'是'int',所以你可以直接做到:'int result =(int)workDays;' – 2014-09-03 09:13:31

回答

0

我相信这是你想。我想你实际上想要将int转换为枚举而不是其他方式。将int转换为enum与转换任何数据类型相同。 (YourEnum)intVar

public int AddVendor(string companyname, string addressOne, string addressTwo, string city, string state, string country, string phone, string email, int workingDays) 
    { 
     var vendor = new Vendor() 
     { 
      // skipped for brevity 
      WorkingDays = (WorkDays)workingDays 
     }; 
     _unitOfWork.VendorRepository.Insert(vendor); 
     _unitOfWork.VendorRepository.Save(); 

     return vendor.Id; 
    } 

[HttpPost] 
    public ActionResult Create(VendorViewModel model) 
    { 
     //... skipped for brevity 
     var vendor = _vendorService.AddVendor(model.CompanyName, model.AddressLineOne, model.AddressLineTwo, model.City, model.State, model.Country,model.OpeningTime,model.ClosingTime, model.Phone, model.Email, (int)model.WorkingDays); 
     //... skipped for brevity 

    } 

这就是说,如果你从int workingDays参数改变workingDays参数枚举参数,你就不需要投。例如。

public int AddVendor(string companyname, string addressOne, string addressTwo, string city, string state, string country, string phone, string email, int workingDays) 

变化

public int AddVendor(string companyname, string addressOne, string addressTwo, string city, string state, string country, string phone, string email, WorkDays workingDays) 
{ 
    var vendor = new Vendor() 
    { 
     // skipped for brevity 
     WorkingDays = workingDays 
    }; 
    _unitOfWork.VendorRepository.Insert(vendor); 
    _unitOfWork.VendorRepository.Save(); 

    return vendor.Id; 
} 
+0

谢谢你很正确这就是我想要的 谢谢你的时间 – user3811481 2014-09-03 11:50:51

3

你可以按照以下丢!

int x = (int)WorkDays.MondayToFriday; 

如果你想为这个扩展方法,那么你可以这样写: -

public static class EnumExtensions 
{ 
    public static int ToInt(this Enum enum) 
    { 
     return (int)((object)enum); 
    } 
} 

而且使用它,如下图所示: -

int x = WorkDays.MondayToFriday.ToInt(); 
+0

是的,我已经试过这个,它确定,但我不想分配任何枚举值我想要从我的观点 – user3811481 2014-09-03 09:11:58

+0

选择的价值还是会改变为来自控制器的价值? – user3811481 2014-09-03 09:13:06

+0

对不起,我无法得到你想说的@ user3811481 – Neel 2014-09-03 09:19:14