单选按钮事件并不总是触发
|
我有一个带有selectedindexchanged事件的单选按钮列表,该事件更新了搜索功能。其中一项是在aspx中指定的,其他项是附加的数据绑定项。无论我将其设置为默认值,该项目都不会触发该事件。所有其他项目都会触发该事件。此外,似乎在选择“死”项之后,该事件根本不会触发。
如何找到错误并纠正?这是当前代码。
编辑:对不起,如果简短版本具有误导性。我不确定要包含什么。这是整个页面。
所有aspx:
<%@ Page Language=\"C#\" MasterPageFile=\"~/MSDS/MSDS.master\" EnableEventValidation=\"false\"
AutoEventWireup=\"true\" CodeFile=\"SearchMSDS.aspx.cs\" Inherits=\"MSDS_ByDept\" Title=\"NCLWeb - Search MSDS\" %>
<%@ Register Assembly=\"SqlWhereBuilder\" Namespace=\"UNLV.IAP.WebControls\" TagPrefix=\"cc1\" %>
<%@ Register Assembly=\"AjaxControlToolkit\" Namespace=\"AjaxControlToolkit\" TagPrefix=\"cc2\" %>
<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"PageContent\" runat=\"Server\">
<h2>
<asp:Label ID=\"lblTitle\" runat=\"server\">Search Active MSDS</asp:Label></h2>
<table class=\"style1\">
<tr>
<td style=\"width: 435px\" valign=\"top\">
<asp:Panel runat=\"server\" ID=\"pnlSearch\" DefaultButton=\"btnSearch\">
<asp:TextBox ID=\"txtSimpleSearch\" runat=\"server\" Width=\"262px\"></asp:TextBox>
<asp:Button ID=\"btnSearch\" runat=\"server\" Text=\"Search\" Width=\"96px\" OnClick=\"btnSearch_Click\" />
<br />
<asp:LinkButton ID=\"btnAdvSearch\" runat=\"server\" OnClick=\"btnAdvSearch_Click\" Font-Size=\"Small\">Show Advanced Search</asp:LinkButton>
</asp:Panel>
<asp:Panel ID=\"pnlAdvSearch\" runat=\"server\" Width=\"635px\" DefaultButton=\"btnRunAdvSearch\">
<asp:Button ID=\"btnRunAdvSearch\" runat=\"server\" OnClick=\"btnRunAdvSearch_Click\" Text=\"Advanced Search\" />
<cc1:SqlWhereBuilder ID=\"SqlWhereBuilder1\" runat=\"server\" ClientCodeLocation=\"../JavaScripts/SqlWhereBuilder.js\"
FieldsFile=\"../ConfigFiles/SearchMSDS.config\" OperatorListsFile=\"../ConfigFiles/SearchMSDS.config\"
ValueEntryFile=\"../ConfigFiles/SearchMSDS.config\">
</cc1:SqlWhereBuilder>
<br />
<br />
</asp:Panel>
<cc2:CollapsiblePanelExtender ID=\"pnlAdvSearch_CollapsiblePanelExtender\" runat=\"server\"
CollapseControlID=\"btnAdvSearch\" Collapsed=\"True\" Enabled=\"True\" ExpandControlID=\"btnAdvSearch\"
TargetControlID=\"pnlAdvSearch\">
</cc2:CollapsiblePanelExtender>
</td>
<td valign=\"top\">
<asp:Panel ID=\"pnlStatus\" runat=\"server\">
<asp:RadioButtonList ID=\"rblStatus\" runat=\"server\" AppendDataBoundItems=\"True\"
AutoPostBack=\"True\" DataSourceID=\"SqlDataSource1\" DataTextField=\"DisplayValue\"
DataValueField=\"Value\" OnSelectedIndexChanged=\"RadioButtonList1_SelectedIndexChanged\"
RepeatDirection=\"Horizontal\" CellPadding=\"3\" CellSpacing=\"3\"
CausesValidation=\"True\" Visible=\"True\">
<asp:ListItem Selected=\"True\">All</asp:ListItem>
</asp:RadioButtonList>
</asp:Panel>
<asp:SqlDataSource ID=\"SqlDataSource1\" runat=\"server\" ConnectionString=\"<%$ ConnectionStrings:NCLWebConnectionString %>\"
SelectCommand=\"getOptionList\" SelectCommandType=\"StoredProcedure\">
<SelectParameters>
<asp:Parameter DefaultValue=\"msds_Status\" Name=\"ListName\" Type=\"String\" />
</SelectParameters>
</asp:SqlDataSource>
<asp:UpdatePanel runat=\"server\" ID=\"upd2\">
<ContentTemplate>
<asp:Button ID=\"btnExport\" runat=\"server\" Text=\"Export Results\"
OnClick=\"btnExport_Click1\" UseSubmitBehavior=\"False\" />
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</table>
<asp:UpdatePanel ID=\"UpdatePanel1\" runat=\"server\">
<ContentTemplate>
<asp:UpdateProgress ID=\"UpdateProgress1\" runat=\"server\" DisplayAfter=\"100\" DynamicLayout=\"False\">
<ProgressTemplate>
<img src=\"../images/loading.gif\" alt=\"Loading...\" style=\"text-align: center\" />
<asp:Label ID=\"lblProgress\" runat=\"server\"></asp:Label></ProgressTemplate>
</asp:UpdateProgress>
<asp:GridView ID=\"gridResults\" runat=\"server\" DataSourceID=\"sqlMSDS\" OnRowDataBound=\"GridView1_RowDataBound\"
AllowPaging=\"True\" PageSize=\"25\" AllowSorting=\"True\" OnSelectedIndexChanged=\"gridResults_SelectedIndexChanged\"
AutoGenerateColumns=\"False\" EmptyDataText=\"No matching MSDS Sheets.\" OnSorted=\"gridResults_Sorted\">
<Columns>
<asp:BoundField DataField=\"ID\" HeaderText=\"ID\" InsertVisible=\"False\" Visible=\"false\"
ReadOnly=\"True\" SortExpression=\"ID\" />
<asp:BoundField DataField=\"ChemicalTitle\" HeaderText=\"ChemicalTitle\" SortExpression=\"ChemicalTitle\" />
<asp:BoundField DataField=\"Manufacturer\" HeaderText=\"Manufacturer\" SortExpression=\"Manufacturer\" />
<asp:BoundField DataField=\"UsageDept\" HeaderText=\"UsageDept\" SortExpression=\"UsageDept\" />
<asp:BoundField DataField=\"Notes\" HeaderText=\"Notes\" SortExpression=\"Notes\" />
<asp:BoundField DataField=\"Health\" HeaderText=\"Health\" visible=\"false\" SortExpression=\"Health\" />
<asp:BoundField DataField=\"Fire\" HeaderText=\"Fire\" visible=\"false\" SortExpression=\"Fire\" />
<asp:BoundField DataField=\"Reactivity\" HeaderText=\"Reactivity\" visible=\"false\" SortExpression=\"Reactivity\" />
<asp:BoundField DataField=\"DateUpdated\" HeaderText=\"DateUpdated\" SortExpression=\"DateUpdated\" />
</Columns>
<SelectedRowStyle BackColor=\"Yellow\" />
</asp:GridView>
<asp:SqlDataSource ID=\"sqlMSDS\" OnSelected=\"sqlMSDS_OnSelected\" runat=\"server\" ConnectionString=\"<%$ ConnectionStrings:NCLWebConnectionString %>\"
SelectCommand=\"SELECT [ID]
,[ChemicalTitle]
,[Manufacturer]
,[UsageDept]
,[Notes]
,[Health]
,[Fire]
,[Reactivity]
,[DateUpdated]
FROM [msds_Sheets]\" OnSelecting=\"sqlMSDS_Selecting\"></asp:SqlDataSource>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID=\"btnSearch\" EventName=\"Click\" />
<asp:AsyncPostBackTrigger ControlID=\"btnRunAdvSearch\" EventName=\"Click\" />
<asp:AsyncPostBackTrigger ControlID=\"rblStatus\" EventName=\"SelectedIndexChanged\" />
<asp:AsyncPostBackTrigger ControlID=\"btnExport\" EventName=\"Click\" />
</Triggers>
</asp:UpdatePanel>
<br />
</asp:Content>
和代码背后:
List<String> safeWords = new List<String>();
protected void Page_Load(object sender, EventArgs e)
{
pnlStatus.Visible = User.IsInRole(\"msds_Admin\");
gridResults.DataKeyNames = new String[] { \"id\" };
txtSimpleSearch.Focus();
if (!IsPostBack)
{
safeWords.Add(\"delete\");
safeWords.Add(\"insert\");
safeWords.Add(\"update\");
safeWords.Add(\"set\");
safeWords.Add(\"exec\");
safeWords.Add(\"N\'\");
sqlMSDS.SelectCommand += \" Where status = 0 \";
Session[\"Sql\"] = sqlMSDS.SelectCommand;
try
{
Session[\"OriginalSQL\"] = sqlMSDS.SelectCommand.Remove(sqlMSDS.SelectCommand.IndexOf(\"Where\"));
}
catch (Exception)
{
Session[\"OriginalSQL\"] = sqlMSDS.SelectCommand;
}
}
}
protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
{
((Label)UpdateProgress1.FindControl(\"lblProgress\")).Text = \"Searching...\";
if (btnSearch.Visible)
{
btnSearch_Click(null, null);
if (RadioButtonList1.SelectedValue != \"All\")
{
sqlMSDS.SelectCommand += \" And Status = \" + RadioButtonList1.SelectedValue;
}
else
{
//Somehow force the grid to research using no status parameter
sqlMSDS.SelectCommand = Session[\"Sql\"].ToString();
}
}
else
{
btnRunAdvSearch_Click(null, null);
if (RadioButtonList1.SelectedValue != \"All\")
{
if (sqlMSDS.SelectCommand.Contains(\"Where\"))
{
sqlMSDS.SelectCommand += \" And Status = \" + RadioButtonList1.SelectedValue;
}
else
{
sqlMSDS.SelectCommand += \" Where Status = \" + RadioButtonList1.SelectedValue;
}
}
else
{
//Somehow force the grid to research using no status parameter
sqlMSDS.SelectCommand = Session[\"Sql\"].ToString();
}
}
}
没有找到相关结果
已邀请:
3 个回复
埃输林桨铃
如果您无法使用jQuery,请尝试以下javascript:
寒健
锹缄
单击\“全部\”不会更改选定的索引,因为已经选择了该项目,因此不会触发该事件。拾取其他任何选项都会更改所选选项,并导致事件触发。我相信您的目标是当您单击“全部”时显示所有状态的结果。您应该执行以下操作之一: 由于已选择\“ All \”,因此在最初加载页面时显示这些结果。 添加一个“搜索”按钮来启动回发,而不是使用单选按钮的“自动回发”。 用DropDownList替换RadioButtonList,并为其提供两个初始ListItem:\“选择状态\”-其值为空字符串,以及\“ All \”其值为\“ All \”。 \“ Pick a Status \”虚拟条目在DropDownList中看起来比在RadioButtonList中看起来更合适。 在上面列出的选项中,我个人更喜欢使用“搜索”按钮,因为AutoPostBack困扰着我。我讨厌AutoPostBack DropDownLists,当列表具有焦点时不小心使用了鼠标滚轮时,会使网页变得笨拙。