我有一个搜索功能,允许最终用户搜索数据库中的项目。此搜索功能有一个文本框,两个组合框和一个按钮。
当选择其中一个组合框项目时,其他值会更改,并且它将被设置为禁用。这是通过Javascript完成的并且有效。
所有控件都在更新面板内。
更新面板完成回调后,正在重置禁用的组合框,将其重置为已启用。
Javascript所做的更改不会保存到视图状态并在初始请求中发回。
任何人都可以对这个问题有所了解吗?
ASP
<asp:UpdatePanel runat="server" ID="UPJobDetailSearch" ChildrenAsTriggers="true">
<ContentTemplate>
<div id="searchbox" class="searchbox">
<dx:ASPxTextBox ID="TxtSearchTerm" runat="server" CssClass="searchbox" name="searchbox" NullText="Search for.." SkinID="None" />
</div>
<div id="searchcombo">
<dx:ASPxComboBox ID="CbSearchCriteria" ClientInstanceName="CbSearchCriteria" Width="150" CssClass="combobox" AutoPostBack="false" NullText="Choose Criteria" runat="server" SelectedIndex="-1" SkinID="None">
<dx:ASPxComboBox ID="CbSearchCriteria" ClientInstanceName="CbSearchCriteria" Width="150" CssClass="combobox" AutoPostBack="false" NullText="Choose Criteria" runat="server" SelectedIndex="-1" SkinID="None">
<Items>
<dx:ListEditItem Text="Id" Value="ID" />
<dx:ListEditItem Text="Num" Value="NUM" />
</Items>
</dx:ASPxComboBox>
</div>
<div id="searchLocationcombo">
<dx:ASPxComboBox ID="CbSearchLocationCriteria" ClientInstanceName="CbSearchLocationCriteria" CssClass="combobox" AutoPostBack="false" runat="server" NullText="Location" SelectedIndex="-1" SkinID="None"
ClientSideEvents-SelectedIndexChanged="function(s,e){ ChangeSearchCriteriaItem(s,e); }">
<Items>
<dx:ListEditItem Text="Jobs" Value="Jobs" />
<dx:ListEditItem Text="Comms" Value="Comms" />
</Items>
</dx:ASPxComboBox>
</div>
<div id="SearchBtn" class="searchbtn">
<dx:ASPxButton ID="BtnSearch" CssClass="BtnSearch" runat="server" Text="Search" OnClick="BtnSearch_Click" ClientSideEvents-Click="function(){ ShowSearching(); }" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
NB。我的控件是DevExpress aspx控件。 (我不会想象这会很重要)
Javascript
function ChangeSearchCriteriaItem(s, e) {
debugger;
var cmbLocationCriteria = ASPxClientControl.GetControlCollection().GetByName("CbSearchLocationCriteria")
var selecteditem = cmbLocationCriteria.GetSelectedItem();
var cmbSearchCriteria = ASPxClientControl.GetControlCollection().GetByName("CbSearchCriteria");
if (selecteditem.text == "Comms Log") {
cmbSearchCriteria.SetValue("JobId");
cmbSearchCriteria.SetEnabled(false);
}
else {
cmbSearchCriteria.SetEnabled(true);
}
}
答案 0 :(得分:1)
这是WebForms中的常见问题。是的,你的猜测是正确的。启用状态不会保存在ViewState中。
最好的方法是使用pageLoad函数:
<script>
///<summary>
/// This will fire on initial page load,
/// and all subsequent partial page updates made
/// by any update panel on the page
///</summary>
function pageLoad(){ alert('page loaded!') }
</script>
在pageLoad功能中,您可以根据需要重置启用状态。
第二个选项
您还可以尝试在回发事件中在CodeBehind中注册ClientScript,第三个参数将是您的JavaScript函数,并在回发完成后调用。在此示例中,您将在函数'javascriptFunctionName'中设置启用状态:
ClientScriptManager.RegisterStartupScript(
typeof(page1),
"CssFix",
"javascriptFunctionName()",
true);