2

ラジオボタンリストで非常に奇妙な問題が発生しました。数回クリックしてもSelectedIndexChangedイベントが発生しないようで、ポストバック後も同じ値のままです。

<asp:RadioButtonList runat="server" ID="rblShowRecords" AutoPostBack="true" 
OnSelectedIndexChanged="rblShowRecords_SelectedIndexChanged" RepeatDirection="Horizontal">
    <asp:ListItem >Show Active/Completed</asp:ListItem>
    <asp:ListItem >Show Active</asp:ListItem>
    <asp:ListItem >Show Completed</asp:ListItem>
</asp:RadioButtonList>  

イベントメソッドは次のとおりです。

protected void rblShowRecords_SelectedIndexChanged(object sender, EventArgs e)
    {

        switch (rblShowRecords.SelectedItem.Text)
        {
            case "Show Active/Completed":
                CEDatabaseSource.SelectCommand = ConfigurationManager.AppSettings["SelectAllRecords"].ToString();//"SELECT * FROM [CERecord] ORDER BY [Priority]";
                break;
            case "Show Active":
                CEDatabaseSource.SelectCommand = ConfigurationManager.AppSettings["SelectActiveRecords"].ToString();
                break;
            case "Show Completed":
                CEDatabaseSource.SelectCommand = ConfigurationManager.AppSettings["SelectCompletedRecords"].ToString();
                break;
            default:
                break;
        }
        CEDatabaseSource.DataBind(); //Commit the changes to the data source.
        gvRecordList.DataBind(); //Update the GridView
        rblShowRecords.SelectedItem.Value = CEDatabaseSource.SelectCommand; //Update the value of the selected radio button with the selected SELECT command.
    }

なぜ正確に3回しか機能しないのかわかりませんが、その後は上記の方法にはなりません。

同じことをドロップダウンリストで試してみると、3回も機能し、次のエラーが発生します。

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation
4

1 に答える 1

1

最後のコメントに基づいて、SQLクエリをSelectedItem.Valueに設定するコードを削除し、SelectedItem.Textプロパティを使用して、必要なときにコマンドを取得します。selectクエリには、、など>の文字が含まれている可能性<があり、無効なポストバックエラーが発生する可能性があります。変更できます。次のコード:

string GetCommand()
{
    switch (rblShowRecords.SelectedItem.Text)
    {
        case "Show Active/Completed":
            return ConfigurationManager.AppSettings["SelectAllRecords"].ToString();
        case "Show Active":
            return  ConfigurationManager.AppSettings["SelectActiveRecords"].ToString();
        case "Show Completed":
            return  ConfigurationManager.AppSettings["SelectCompletedRecords"].ToString();
        default:
            return "";
    }
}

Page_Loadで

if (IsPostBack) 
{ 
    CEDatabaseSource.SelectCommand = GetCommand();
    CEDatabaseSource.DataBind(); 
}

これで、SelectedIndexChangedコードは次のようになります。

protected void rblShowRecords_SelectedIndexChanged(object sender, EventArgs e)
{
    CEDatabaseSource.SelectCommand = GetCommand();
    CEDatabaseSource.DataBind(); //Commit the changes to the data source.
    gvRecordList.DataBind(); //Update the GridView
}
于 2013-03-17T15:55:19.973 に答える