0

aspx ページには、次のリピーターがあります。

<asp:Repeater runat="server" ID="r" OnItemCommand="paper_ItemCommand">
    <ItemTemplate>
        <div style="padding-bottom:20px">
            <asp:HiddenField runat="server" ID="questionID" Value='<%# Eval("ID") %>'/>
            <asp:Label runat="server" ID="questionNumber" Text='<%# Eval("Number") %>'/><br />
            <asp:Label runat="server" ID="question1" Text='<%# Eval("Question1") %>' /><br />
            [ <asp:Label runat="server" ID="questionMark" Text='<%# Eval("Mark") %>'/> ]<br />
            <asp:Button ID="View_Conversations" runat="server" Text="View Conversations" CommandName="ViewConversationsCommand" />
        </div>
    </ItemTemplate>
    <SeparatorTemplate>
        <hr />
    </SeparatorTemplate>
</asp:Repeater>

コードビハインドファイルには、次のメソッドがあります。

    protected void Page_Load(object sender, EventArgs e)
    {
        var paperID = Session["paperID"].ToString();
        QuestionPaper = repository.GetPaper(Int32.Parse(paperID));
        r.DataSource = QuestionPaper.Questions;
        r.DataBind();
    }

    protected void paper_ItemCommand(object sender, RepeaterCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "ViewConversationsCommand":
                var hidden = e.Item.FindControl("questionID") as HiddenField;
                var myquestionID = hidden.Value;
                break;
        }
    }

私が抱えている問題は、リピーターの View Conversation ボタンをクリックすると、コードがpaper_ItemCommandメソッドではなくpage_loadメソッドにヒットすることです。ここで何が間違っていますか?

4

3 に答える 3

4

ボタンを押すたびにページ自体にポストバックが発生し、ページのライフサイクル全体が実行されるため、ページの読み込みが発生します。ボタンのクリック時にページの読み込みを実行しないようにしたい場合は、次のように試すことができます。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack){
      // Your existing stuff
    }
}

幸運を !!

于 2012-08-14T17:58:24.883 に答える
2

Buttonページにポスト バックするとき (たとえば、 をクリック)を含め、ページが読み込まれるたびに、Page_Loadイベント ハンドラーがヒットします。Page重要なのは、オブジェクトのIsPostBackプロパティを確認することです。

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack) 
    {
        // do things that only should be done on the first page load
        var paperID = Session["paperID"].ToString();
        QuestionPaper = repository.GetPaper(Int32.Parse(paperID));
        r.DataSource = QuestionPaper.Questions;
        r.DataBind();
    }
}
于 2012-08-14T17:58:23.817 に答える
1

page_load は常に最初に実行 されます

if(!Page.IsPostback)
{
 var paperID = Session["paperID"].ToString(); 
        QuestionPaper = repository.GetPaper(Int32.Parse(paperID)); 
        r.DataSource = QuestionPaper.Questions; 
        r.DataBind(); 
}
于 2012-08-14T18:01:15.147 に答える