2014-09-03 126 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