0

C# プロパティCategoryIDがあり、Javascript でその値を設定したい。

以下のように値CategoryIDを設定しようとしています。

var sPath = window.location.pathname;
var catId = null;

var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
if (sPage == 'xyz.aspx')
{
    <%=CommonUtility.CategoryID=4%>;
}
else if(sPage == 'zxy.aspx')
{
    <%=CommonUtility.CategoryID=5%>;
}

しかし、この方法では、常にCategoryID = 5(else ブロックにあります) の値を取得します。

条件に基づいてプロパティ値を取得する方法を教えてください。

4

3 に答える 3

4

クライアント側(js)からC#プロパティを設定することはできません。ajaxを使用していくつかの作業を行うことはできますが、サーバー側のコードを操作することはできません。

編集:

それでも価値を得ることができるのか疑問に思う場合は、マイクのその事実の説明を参照してください。しかし、真実は残っています。できません。それは不可能だ。より長い説明を知りたい場合は、asp.netが実際にどのように機能するか、ライフサイクルなどを確認してください。簡単な言い方は次のようになります。

ユーザーは、自分のブラウザーを使用してサーバーに要求を送信します。サーバーはそれを受信し、要求されたページを作成し、必要なクラスなどをインスタンス化します。次に、それは解析され、html(およびもちろん画像やcssなどの他のリソース)としてクライアントに送信されます。インスタンス化されたページクラスは、サーバーによって既にフラッシュされているため、後でクライアントがアクセスおよび変更することはできません。すべてのリクエストは新しいインスタンスを作成します。とにかく、jsとc#を相互作用させる方法はありません。いくつかのjsを使用してリモートサーバー上のC#を変更できるとしたら、どのようになるか想像できますか?それはまったく意味がありません。

于 2012-08-17T18:50:49.387 に答える
1

このように、クライアント側スクリプトを使用してコード ビハインドでプロパティを設定することはできません。そのようなことを行う唯一の方法は、AJAX を使用してサーバーにデータを送信することですが、それはあなたのケースには適していないと確信しています。

を呼び出す<%=CommonUtility.CategoryID = 4%>と、サーバーは、クライアントに送信する前にページを解析するときに、実際にそのステートメントを実行します。プロパティ値が 5 である理由は、Javascriptifブロックのロジックに関係なく、これらのステートメントが両方とも実行されるためです。クライアント側のコードは、サーバーがこれらのタグの両方を解析するまでブラウザによって実際に実行されることはありません。

ページ読み込み時のコード ビハインドでこれらすべてを単純に実行できない理由はありますか? これを JS で処理する必要があると感じる理由はありますか?

編集:

コード ビハインド ファイル (.aspx.vb または .aspx.cs) にアクセスできない場合は、.aspx ページの上部にあるサーバー スクリプト ブロックを使用してください。

<% 
    If (Request.Path.ToLower().Contains("xyz.aspx")) Then
        CommonUtility.CategoryId = 4
    ElseIf (Request.Path.ToLower().Contains("zxy.aspx")) Then
        CommonUtility.CategoryId = 5
    End If
%>
于 2012-08-17T18:54:46.507 に答える
0

すべてのサーバー コードが最初に実行され、次にページがブラウザーに送信されるため、クライアント スクリプトから C# 変数を設定することはできません。

クライアント コードは次のようになります。

var sPath = window.location.pathname;
  var catId = null;

  var sPage = sPath.substring(sPath.lastIndexOf('/') + 1);
  if (sPage == 'xyz.aspx')
  {
    4;
  }
  else if(sPage == 'zxy.aspx')
  {
    5;
  }
}
于 2012-08-17T18:57:23.750 に答える