2016-09-05 10 views
0

これは、これは私がブレークポイントを置く場合は、次のコードは、要求ASPX - パラメータのないコンストラクタがパラメータ化されたコンストラクタをスキップして呼び出されるのはなぜですか?

oWnd = radopen("CaseCards/Registrai/neigaliuju_registras.aspx?saliesId=" + $("input[name*='hsvSaliesId']").val(), "meow"); 

を作る私のコードビハインドファイルの2つのコンストラクタ

public NeigaliujuRegistras() 
{ 

} 

public NeigaliujuRegistras(string saliesId) 
{ 
    _saliesId = new Guid(saliesId); 
    //more of very secret bla bla 
} 

であるブラウザ

http://localhost:59440/CaseCards/Registrai/neigaliuju_registras.aspx?saliesId=5b8c3abc-4eec-4d69-b66a-25c7f27a2187 

のhttpリクエストであります両方のコンストラクタで、私はそれがパラメータのないコンストラクタに入り、パラメータ化されたコンストラクタが呼び出されることはありません。

この結果、_saliesID{00000000-0000-0000-0000-000000000000}という値になります。

パラメタなしのコンストラクタは、パラメータ化されたコンストラクタで呼び出されるのはなぜですか?

答えて

2

これは、ASP .Netフレームワークがこれらのインスタンスをどのように作成するかを示したものです。

具体的には、Request.QueryStringオブジェクトからsaliesIdを取得できるので、このコンストラクタは必要ありません。コンストラクタにこれを残しておきたい場合は、このようなことができます。

public NeigaliujuRegistras() 
{ 
    // attach a handler to the Init event so to make sure the Request object is available. 
    this.Init += (_o, _e) => { 
     saliesId = new Guid(Request.QueryString["saliesId"]); 
    }; 
} 

また、コードをPage_Loadメソッドに配置する標準的な方法に従うこともできます。

protected void Page_Load(object sender, EventArgs e) 
{ 
    saliesId = new Guid(Request.QueryString["saliesId"]); 
} 
+0

ありがとう、私はパラメータを手動で解析しなければならないのか分かりませんでした。 私は、フレームワークがパラメータを解析し、一致するコンストラクタを選択するASP.NET MVCと同じように動作すると考えました。 – evictednoise

+0

ようこそ!どちらのASP .Net MVCもこのようにはしません。 ASP .Net MVCは他のメソッド(コントローラアクション)でこのマッピングを行います。依存関係を挿入できるコンストラクタを定義することができます。 –

関連する問題