2011-09-13 8 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):. 

私が探してどうあるべきか、日付が私のdevのマシン上でcorrectl保存させることができるものが、プロダクションでうまく動作しない?

値を09/28/1989に切り替えると、うまく動作しますが、ボルヴィアで日付の書式が設定されているため、[日]、[月]、[年]を使用する必要があります。

あなたのweb.configファイル内の文化を設定し
[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

ここでは、ユーザが送信ボタンをクリックしたときに実行さ[HttpPost]対処方法はありますか? MVCまたはデータベースに保存しますか?プロンプトが示唆するように、28-08-1980を試しましたか? –

+0

保存を実行してエラーを生成するコードを含めると役立ちます。しかし、私が推測しなければならない場合、私はサーバー上のロケール設定を確認することをお勧めします - それはあなたのdevボックスと同じロケールを使用していない可能性があります。 – Jason

+0

@Jon Skeet:エラーは本番でのみ発生するため、実際にどこで起動しているかを見るためにブレークポイントを置くことはできません。私が推測しなければならないことは、エラーがActionMetodにあると言うでしょう。 –

答えて

4

層が失敗している
<globalization culture="es-BO" uiCulture="es-BO" /> 
+0

これはプロダクションサーバーではなぜ必要なのでしょうか?私の開発マシンでは、自動的にdatetimeの並べ替えが行われ、データベースに正しく保存されますか? –

+1

@Sergio Tapia ASP.NETは実行されるマシンの地域設定を使用するためです。だから私はあなたのdevマシンがコントロールパネルの中でボリビアの地域設定を使用するように設定されていると思われます。サーバー(特にホストされているもの)は通常、日付形式がMM/dd/yyyyの 'en-US'地域設定を使用します。このため、これらの設定を明示的に明示的に指定する必要があります。 –

+0

お時間をありがとう。これをプロジェクトレベルのWebConfig、またはViewフォルダのWebConfig内に配置する必要がありますか? –

関連する問題