JavaScriptとjQueryを使用した埋め込みASPオブジェクトのIDの取得
-
07-07-2019 - |
質問
jQueryを使用して、 ASP.NET (2.0)ドロップダウンリストの変更イベントはjQueryによって処理されます。問題は、ドロップダウンリストがグリッドビュー内にあり、ユーザーがそのグリッドビュー内の行を編集することを決定した場合のみであることです。
ASPコードブロックを使用してオブジェクトを取得していると思いますが、問題は、ページが最初に行の編集インデックスを読み込むときに存在せず、エラーをスローすることです。 IF
ステートメント内にブロックを配置しても機能しません。
$(document).ready(function() //when DOM is ready, run containing code
{
<% if (grvTimeSheets.EditIndex > -1) {%>
$(#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>).change(function() {
$(#<%= grvTimeSheets.ClientID %>).block({ message: null }
});
}
);
<% } %>
これは私が試みた1つの試みであり、JavaScriptステートメントの外部にIFステートメントASPコードを配置しようとしました。動作しません。
どのようにしてドロップドロップボックスにjQueryイベントを適用できますか?理想的にはできるだけ簡潔に。
答えに感謝しますが、いや、機能しません:(。JavaScriptコードが出力されないようです...混乱しています...
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
$(document).ready(function() //When DOM is ready, run the containing code
{
}
);
</script>
は出力です。これはコードですが:
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
$(document).ready(function() //when DOM is ready, run containing code
{<% if (grvTimeSheets.EditIndex > -1) {%>
var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
$(id).change(function() {
$(id).block({ message: null }
});
<% } %>
}
);
</script>
以前もそうしていたので、私はクレイジーになりました。
申し訳ありませんが、少しわかりやすくしてください。コードビハインドで全体を次のように定義してみました:
DropDownList ddl (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
ClientScriptManager csm = Page.ClientScript;
Type cstype = this.GetType();
String csname1 = "PopupScript";
string script = @"
<script language='javascript' type='text/javascript'>
$(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
csm.RegisterStartupScript(cstype, csname1, script, true);
}
それはあなたの意図ですか?
ところで、上記は機能しませんでした。エラーはなく、イベントは機能しませんでした。
解決
いくつかのことをここに。
- セレクターを
$()
関数に渡すときは、セレクターを引用符で囲む必要があります。上記のコードスニペットは$(#some-generated-id)
のようなものを生成しますが、動作しません。 - ステートメントがonready関数の外にある場合のサーバー側の閉じ中括弧。開始ifと同じレベルでネストする必要があります。
これを試してください:
$(document).ready(function() //when DOM is ready, run containing code
{
<% if (grvTimeSheets.EditIndex > -1) {%>
var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
$(id).change(function() {
$(id).block({ message: null }
});
<% } %>
}
);
機能しない場合は、生成されたjavascriptも貼り付けます。
他のヒント
これを使用:
cs.RegisterClientScriptBlock(cstype, csname, cstext2.ToString(), False)
スクリプトタグを含めているため、スクリプトタグを作成しないことはfalseです。 MSDNのドキュメントでは、フラグの説明が間違っています。
また、 jQueryではなく、コントロールのクライアントIDをコードビハインドから個別の変数に入れるだけですコード。
次に、jQueryコードで代わりにIDを含む変数を使用します。
コードビハインドで作成するスクリプトブロック内:
string script = @"<script type=text/javascript> var myControlId = '" + ddl.ClientId "';") + "</script>"
この構文は検証しませんでしたが、近いはずです。 grvTimeSheets.ClientID
の追加の構文を自分で追加できます。これが機能するようになったら、JavaScript配列を作成してClientIdをそのように保存するように変更し、作業する必要があるグローバルなJavaScript変数が1つしかない場合があります。
別のオプションは、探している要素に、その動作を説明するクラス名を与えるだけです。次に、jQueryコードが本当に明確になります。
$(function() {
$("select.yourMarkerClass").change(....);
});
編集行がない場合、このコードは何もしません。セレクタに一致する要素がある場合、新しい動作が追加されます。
同じIDをページの他の場所で使用していない場合は、 ASPを阻止できます。 NET のUniqueIDとjQueryの高度なセレクタの1つ:
$('[id$=ddlClients]')
これは、全体ではなくID文字列の最後にのみ一致します。コントロールが異なる行内に複数回存在する場合、これはすべてのインスタンスに一致することに注意してください。
その他の例については、 セレクター を参照してください。
Page.ClientScript プロパティを使用して、jQueryでアクセスする必要があるIDを含むスクリプトブロックを登録します。
外部ファイル内のJavaScriptの例を次に示します。
var myFancySelector = '#' + myControlId;
selectedValue = $(myFancySelector).val();
myControlIdはコードビハインドから定義され、ClientScriptBlockに登録されます。
キーには任意のものを使用できますが、一意である必要があります。
週末の後にもっと試してみます。ただし、これはコードでした:
DropDownList ddl = (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
ClientScriptManager csm = Page.ClientScript;
Type cstype = this.GetType();
String csname1 = "PopupScript";
string script = @"
<script language='javascript' type='text/javascript'>
jQuery(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
csm.RegisterStartupScript(cstype, csname1, script, false);
各行にドロップダウンがあるため。各ドロップダウンには一意のClientIdがあるため、Benが提案したことを行うことをお勧めします。クラスセレクターは最も簡単なソリューションであるため、使用します。
または、編集クリックでJavaScript関数を作成し、編集中の行のドロップダウンの一意のクライアントIDを取得できます。
申し訳ありませんが、コードを詳しく読んでおくべきでした。