0

グリッドビューを含む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 を親ページ自体に追加することもできますが、これも一度だけです..?

4

1 に答える 1

0

たとえば、グリッドビューのロードイベントでスクリプトをページに追加できます

<asp:GridView ID="GridView1" runat="server" onload="GridView1_Load">
    </asp:GridView>

次に、イベントを処理し、スクリプトを記述します

protected void GridView1_Load(object sender, EventArgs e)
    {
        StringBuilder strScript = new StringBuilder();
        strScript.Append("<script language=JavaScript>");
        strScript.Append("$('a.all').click( function() {});//etc etc</script>");
        ClientScript.RegisterClientScriptBlock(this.GetType(), "Pop", strScript.ToString());
    }
于 2013-02-15T19:01:22.067 に答える