グリッドビューを含むasp.netページがあり、プログラムで(sp?)列を追加しています。これらの 1 つは itemtemplate であり、機能するにはページに JavaScript が必要です。
テンプレート自体から必要なスクリプトを含むページに追加する方法はありますか?テンプレートがグリッドの各行に対して実際に複数回出力されるとはいえ、明らかに一度だけです。
これは、グリッドの列が動的に生成されているときにグリッドに追加されます。列を生成するコードは次のとおりです。
sub GenerateCols
.....
Dim tActions = New TemplateField()
tActions.HeaderText = "Actions"
tActions.ItemTemplate = New CheckBoxActionTemplate()
grd.Columns.Add(tActions)
....
end sub
ここにテンプレートコードがあります
public class CheckBoxActionTemplate : ITemplate
{
public CheckBoxActionTemplate() { }
#region ITemplate Members
public void InstantiateIn(Control container)
{
HtmlAnchor aAll = new HtmlAnchor();
aAll.InnerText = "all";
aAll.Attributes.Add("class", "all");
HtmlAnchor aNone = new HtmlAnchor();
aNone.InnerText = "none";
aNone.Attributes.Add("class", "none");
HtmlAnchor aInvert = new HtmlAnchor();
aInvert.InnerText = "invert";
aInvert.Attributes.Add("class", "invert");
container.Controls.Add(aAll);
container.Controls.Add(aNone);
container.Controls.Add(aInvert);
}
#endregion
}
ここにサポートするJavaScriptがあります
$("a.all").click( function() {
$(this).closest('tr').find(':checkbox').each(function(){
$(this).attr('checked', 'checked');
});
return false;
});
// Select none
$("a.none").click( function() {
$(this).closest('tr').find(':checkbox').each(function(){
$(this).removeAttr('checked');
});
return false;
});
// Invert selection
$("a.invert").click( function() {
$(this).closest('tr').find(':checkbox').each(function(){
if($(this).is(':checked')){
$(this).removeAttr('checked');
}else{
$(this).attr('checked', 'checked');
}
});
return false;
});
それに加えて、含まれているページに複数回表示されるコントロールである場合、コントロールはその JS を親ページ自体に追加することもできますが、これも一度だけです..?