3

<script> srcから属性を動的に変更するにはどうすればよいPage_Loadですか?

動的とは、実際には同じページDefault.aspxであることを意味しますが、更新ごとに異なるjsソースが参照されます。どのファイルを選択するかの背後にあるロジックjsは問題ではなく、それを設定するメカニズムだけです。

私は試した:

<script id="script1" runat="server" language="javascript" src="a.js" type="text/javascript"></script>

しかしscript1、サイドでは利用できません.cs。タグ.aspxを使用して側で変更できることはわかっていますが、 . 側でこれを行う方法が必要ですか?<% %>.aspx.csPage_Load

4

4 に答える 4

6

ページロードハンドラーには、次のようなものがあります

string csurl = null;
string csname = "myscript";
if (condition)
{
    csurl = "~/a.js";
}
else    
{  
    csurl = "~/b.js";
}

if (!Page.ClientScript.IsClientScriptIncludeRegistered(cstype, csname))
{
    Page.ClientScript.RegisterClientScriptInclude(
        this.GetType(), 
        csname, 
        ResolveClientUrl(csurl));
}

また

 string csurl = null;
 if (condition)
 {
     csurl = "a.js";
 }
 else    
 {  
     csurl = "b.js";
 }
 Literal script = new Literal();
 script.Text = string.Format(
     @"<script src=""{0}"" type=""text/javascript""></script>",csurl);
 Page.Header.Controls.Add(script);
于 2012-07-06T16:30:45.483 に答える
4

これを行うにはいくつかの方法があります。1 つの方法は、コード ビハインドで を返すprotectedorpublicメソッドを作成することstringです。これにより、条件に基づいて Javascript に正しい URL が返されます。次に、次のように、マークアップからそのメソッドを呼び出すだけです。

<script language="javascript" src="<%=GetJavaScriptUrl() %>" type="text/javascript"></script>

この例では、分離コードでメソッドを呼び出すことを前提としていますGetJavaScriptUrl

于 2012-07-06T16:28:46.590 に答える
0

スクリプトマネージャーを使用するだけです:

例えば、

string jsName = condition ? "a.js" : "b.js";

ScriptManager.GetCurrent(this).Scripts.Add(new ScriptReference(jsName));
于 2012-07-06T16:45:51.450 に答える
0

残念ながら、 を使用する以外に選択肢はあまりないと思います<%= %>

誰かが別のことを知っていない限り (そうであれば、コメントしてください。変更します) runat="server"、ブロックで属性を使用する<script>と、ブロックはサーバー側で実行されます。

アップデート

申し訳ありませんが、あなたの質問を少し誤解しました。

ブロックの属性<% %>を設定するために使用したくないと言っていると思いました。ファイルごとに個別のブロックを作成し、論理ブロックを介して表示することを意味していたことがわかりました。src<script><script><%If x Then%><%Else%><%End If%>

他の人が既に述べたように (そして私がほのめかした)、コード ビハインドの GetSrcPath メソッドをsrc使用して属性を設定し、ロジックを含めることができます。<%=GetSrcPath()%>

于 2012-07-06T16:28:34.960 に答える