2011-09-13 38 views
1

這適用於我的開發機器,但不適用於我的實際生產服務器。保存DateTime值在生產中不起作用MVC3服務器

我只是想註冊一個用戶,但出生日期必須格式化爲dd/mm/yyyy。例如:28/09/1980

這在我的開發機器上工作得很好,我可以註冊並且正確保存了出生日期。

但在運行產品服務器上完全相同的代碼時,我得到的錯誤:

The value '29/08/1980' is not valid for Fecha de Nacimiento (dd-mm-aaaa):. 

我應該尋找什麼可能會造成日期我的開發機器上保存correctl,但拒絕在生產中很好地工作?

如果我將值切換到09/28/1989它可以正常工作,但由於日期格式化在玻利維亞這裏,我需要使用日然後月,然後年。

這裏的運行,當用戶點擊提交按鈕的[HttpPost]操作方法:

[HttpPost] 
public ActionResult Register(UserModel model) 
{ 
    EFCityRepository cityRepo = new EFCityRepository(); 
    model.Cities = new List<SelectListItem>(); 
    foreach (var city in cityRepo.FindAllCities()) 
    { 
     model.Cities.Add(new SelectListItem { Text = city.Name, Value = city.CityId.ToString(), Selected = true }); 
    } 

    EFGenderRepository genderRepo = new EFGenderRepository(); 
    model.Genders = new List<SelectListItem>(); 
    foreach (var gender in genderRepo.FindAllGenders()) 
    { 
     model.Genders.Add(new SelectListItem { Text = gender.Name, Value = gender.GenderId.ToString(), Selected = true }); 
    } 

    if (ModelState.IsValid) 
    { 
     Domain.User user = Mapper.Map<UserModel, Site.Domain.User>(model); 
     user.UserRoleId = 1; 
     user.EmailVerificationCode = SecurityHelpers.GenerateRandomToken(); 
     user.IsActive = true; 
     user.LancesSpent = 0; 
     user.GoldShopPointsSpent = 0; 
     user.LanceCreditBalance = 25; 
     user.GoldShopCreditBalance = 0; 
     user.DateOfRegistry = DateTime.Now; 
     user.LastDateLogin = DateTime.Now; 

     var result = userRepo.CreateUser(user); 

     if (result == UserCreationResults.Ok) 
     { 
      SecurityHelpers.SendVerificationEmail(user.Email, user.UserId, user.EmailVerificationCode); 
      FormsAuthentication.SetAuthCookie(model.Login, false /* createPersistentCookie */); 
      return RedirectToAction("Index", "Home"); 
     } 
     else 
     { 
      switch (result) 
      { 
       case UserCreationResults.UsernameExists: 
        ModelState.AddModelError("", "El nombre de usuario ya esta siendo utilizado."); 
        break; 
       case UserCreationResults.EmailAlreadyExists: 
        ModelState.AddModelError("", "Ese correo ya esta en uso."); 
        break; 
       case UserCreationResults.NicknameAlreadyExists: 
        ModelState.AddModelError("", "El nickname ya esta siendo utilizado."); 
        break; 
       case UserCreationResults.UnknownError: 
        ModelState.AddModelError("", "Algo durante el registro. Por favor intente de nuevo."); 
        break; 
       default: 
        break; 
      } 
     } 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 

} 
+1

哪一層失敗的原因? MVC還是保存到數據庫?根據提示,你有沒有試過28-08-1980? –

+0

如果您包含執行保存併產生錯誤的代碼,它將有所幫助。但是如果我不得不猜測,我會建議檢查服務器上的語言環境設置 - 它可能沒有使用與您的開發盒相同的語言環境。 – Jason

+0

@Jon Skeet:錯誤只在生產中觸發,所以我不能在那裏放置一個斷點來查看它實際發生的位置。如果我不得不猜測,我會說錯誤在ActionMetod中。 –

回答

4

設置在你的web.config文化:

<globalization culture="es-BO" uiCulture="es-BO" /> 
+0

爲什麼在生產服務器中這是必需的,但在我的開發機器上它會自動重新排序日期時間並將其正確保存到數據庫中? –

+1

@Sergio Tapia,因爲ASP.NET使用它在其上執行的機器的區域設置。所以我懷疑你的開發機器被配置爲在控制面板中使用玻利維亞區域設置,而服務器(特別是託管的)通常使用日期格式爲MM/dd/yyyy的'en-US'區域設置。出於這個原因,您需要明確指定這些設置。 –

+0

感謝您的時間。現在我應該將它放在項目級別的WebConfig中,還是放置在View文件夾的WebConfig中? –

相關問題