2011-11-10 8 views
2

これは実際にフレームワークのバグのようです。このパラメータは要求のパラメータに正しい名前が付けられていますが、アクションパラメータには常にバインドされません。それは6ヶ月間働いていましたが、今ではアプリケーション全体でいくつかのアクションメソッドで発生しています。MVCアクションパラメータがnullable GUidに一貫してバインドしません

私はVSを閉じるか、コンピュータを再起動することができました。通常はVSを修復します。最近私はこれに遭遇したときに、パラメータを文字列に変換してからGUIDに変換せずに取得することができませんでした。

私たちはnull可能なGuidを受け入れる多くのアクションメソッドとそのパラメータを手動で変換する必要があるため、何をするべきかアドバイスします。

私はこれを回避する必要はありません。誰かがこれをどのようにデバッグできるのか、彼らが何を考えているのか分かりますか?ランダムで矛盾しています。

ありがとうございました!

答えて

3

実際にこの問題が発生していない限り、私の最初の考えは、ブラウザから渡される実際の値に問題があるということです。

nullのDateTimesで同様の問題をデバッグし、カスタムモデルバインダーを作成してDateTimeをバインドするだけで回避できましたか?タイプ。

このようにすれば、渡された値を検査し、異常がないかどうかチェックできます。

これはかなり簡単です。あなたにGlobal.asaxの:

ModelBinders.Binders.Add(typeof(guid?), new GuidModelBinder()); 

をし、クラスを作成

public class GuidModelBinder : IModelBinder 
    { 

     public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
     { 
      var valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
      var modelState = new ModelState { Value = valueResult }; 
     } 
     //Do whatever you need to inspect the valueResult in here 
    } 
1

実際、非常に奇妙な動作です。それをデバッグするには、ASP.NET MVCのソースコードをチェックアウトすることができます。その後、ModelBinderのメソッドに "入る"ことができます。

また、カスタムモデルのバインダーを作成することもできます。まず、MVCの組み込みメソッドにステップインしたい場合は、ブレークポイントを設定するのが簡単になります。また、問題の根本を特定したら、モデルが正しくバインドされるように、自分のコードを使用するだけでなく、何が起こっているのかを記録する機会も与えられます。

あまりにも遠くなる前に、カスタムモデルのバインダーを既に使用しているかどうかをチェックし、そうであればバグをチェックしてください。また、あなたのモデルクラスは可能な限りシンプルであり、起こり得る競争条件やその他の奇妙なことにならないようにする必要があります。

関連する問題