2013-03-12 129 views
0

回发后,我有一个小页面具有以下ASPX标记访问了jQuery元素通过的UpdatePanel

<fieldset style="width:40%; margin-left:50px;"> 
    <legend> Site User Role Management</legend> 
    <asp:Label ID="lblSiteUserDDl" runat="server" AssociatedControlID="ddlSiteUsers" 
     Text="Manage the roles in which a user is registered by selecting the user from the dropdown list below."></asp:Label> 
    <asp:DropDownList ID="ddlSiteUsers" runat="server" CssClass="dropdowns" AutoPostBack="True" ClientIDMode="Static" /> 
    <br /><br /> 
    <asp:UpdatePanel ID="updplRoleChange" runat="server" ClientIDMode="Static"> 
      <ContentTemplate> 
       <fieldset id="rolemanagement" style="width:80%;" Visible="false" runat="server" > 
        <legend id="rolemgmtlegend" runat="server"></legend> 

           <asp:Label ID="lblCurrentRole" runat="server" CssClass="literaltext"></asp:Label><br /> 
           <asp:Label ID="lblSiteUserRole" runat="server" CssClass="literaltext"></asp:Label><br /><br /> 
           <asp:RadioButtonList id="rblstRoleChange" runat="server"> 
            <asp:ListItem selected="true">Add Role to User</asp:ListItem> 
            <asp:ListItem>Remove Role from User</asp:ListItem>          
           </asp:RadioButtonList> 
           <asp:DropDownList ID="ddlUserRoles" CssClass="dropdowns" runat="server" AutoPostBack="True" ClientIDMode="Static" /><br /> 
           <asp:Button ID="submitrolechange" Text="Submit Role Change" CssClass="buttons" runat="server" ClientIDMode="Static" Visible="False" /> 
       </fieldset> 
      </ContentTemplate> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="ddlSiteUsers" EventName="SelectedIndexChanged"/> 
       <asp:AsyncPostBackTrigger ControlID="submitrolechange" EventName="Click"/> 
      </Triggers> 
     </asp:UpdatePanel> 
</fieldset> 

及以下的JQuery

<script> 
    $(document).ready(function() { 
     $('#ddlSiteUsers').change(function() { 
      $(this).css({ 'color': 'black', 'font-size': '1.1em', 'font-weight': 'bold' }); 
     }); 
     // 

     $('#updplRoleChange select').change(function() { 
      $('#submitrolechange').show(); 
      $(this).css({ 'color': 'black', 'font-size': '1.1em', 'font-weight': 'bold' }); 
     }); 
    }); 
</script> 

第一功能的工作原理,第二个没有。在使用第一个下拉选择器后,更新面板中没有为标记生成html,所以我甚至不确定选择器ID是否实际上保持静态。

回答

0

一旦更改第二个下拉列表(如设置AutoPostBack="True"),颜色的变化为粗体然后回发到服务器。

从服务器返回时,它不保持以前的客户端状态,这是预期的行为。

enter image description here

如果你想保持以前的客户端的状态,你需要做这样的页面加载的东西。

<fieldset style="width: 40%; margin-left: 50px;"> 
    <legend>Site User Role Management</legend> 
    <asp:Label ID="lblSiteUserDDl" runat="server" AssociatedControlID="ddlSiteUsers" 
     Text="Manage the roles in which a user is registered by selecting the user from the dropdown list below."></asp:Label> 
    <asp:DropDownList ID="ddlSiteUsers" runat="server" CssClass="dropdowns" AutoPostBack="True" ClientIDMode="Static"> 
     <asp:ListItem Text="One" Value="One" /> 
     <asp:ListItem Text="Two" Value="Two" /> 
    </asp:DropDownList> 
    <br /> 
    <br /> 
    <asp:UpdatePanel ID="updplRoleChange" runat="server" ClientIDMode="Static"> 
     <ContentTemplate> 
      <fieldset id="rolemanagement" runat="server"> 
       <legend id="rolemgmtlegend" runat="server"></legend> 

       <asp:Label ID="lblCurrentRole" runat="server" CssClass="literaltext"></asp:Label><br /> 
       <asp:Label ID="lblSiteUserRole" runat="server" CssClass="literaltext"></asp:Label><br /> 
       <br /> 
       <asp:RadioButtonList ID="rblstRoleChange" runat="server"> 
        <asp:ListItem Selected="true">Add Role to User</asp:ListItem> 
        <asp:ListItem>Remove Role from User</asp:ListItem> 
       </asp:RadioButtonList> 
       <asp:DropDownList ID="ddlUserRoles" CssClass="dropdowns" runat="server" AutoPostBack="True" 
        ClientIDMode="Static" OnSelectedIndexChanged="ddlUserRoles_SelectedIndexChanged"> 
        <asp:ListItem Text="One" Value="One" /> 
        <asp:ListItem Text="Two" Value="Two" /> 
       </asp:DropDownList> 
       <asp:Button ID="submitrolechange" Text="Submit Role Change" CssClass="buttons" runat="server" ClientIDMode="Static" Visible="False" /> 
      </fieldset> 

     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="ddlSiteUsers" EventName="SelectedIndexChanged" /> 
      <asp:AsyncPostBackTrigger ControlID="submitrolechange" EventName="Click" /> 
     </Triggers> 
    </asp:UpdatePanel> 
</fieldset> 
<script> 
    $(document).ready(function() { 
     $('#ddlSiteUsers').change(function() { 
      $(this).css({ 'color': 'black', 'font-size': '1.1em', 'font-weight': 'bold' }); 
     }); 
     // 

     $('#updplRoleChange select').change(function() { 
      $('#submitrolechange').show(); 
      $(this).css({ 'color': 'black', 'font-size': '1.1em', 'font-weight': 'bold' }); 
     }); 

    }); 

    function roleChange() { 
     if ($('#updplRoleChange select').val() == "Two") { 
      $('#updplRoleChange select').css({ 'color': 'black', 'font-size': '1.1em', 'font-weight': 'bold' }); 
     } 
    } 
</script> 

protected void ddlUserRoles_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ScriptManager.RegisterStartupScript(this, GetType(), UniqueID, "roleChange();", true); 
} 
+0

不知道你的意思在这里。这些函数被包装在doc.ready中。你是否指jQuery中的page.IsPostback函数?如何维护jQuery中回传之间的下拉CSS变化? – dinotom 2013-03-12 18:46:05

+0

你说'第一个功能起作用,第二个功能不起作用.'我的回答是两个功能都起作用。您不会在第二个函数中看到结果,因为一旦调用该页面,页面就会回发到服务器。 – Win 2013-03-12 18:49:05

+0

是的,我同意这一点,我可以看到在行动中,但我不知道如何解决这个问题,如何在最后一次回发期间保持该下拉菜单的CSS状态?这就是问题所在。 – dinotom 2013-03-12 18:59:27

0

我想你想使用现场像这样:

$('#updplRoleChange select').live("change", function(e) { 
     // Do something exciting 
}); 
+0

我试着用已经活,它使CSS改变breifly,不显示按钮,改变下拉的CSS回原来的样子 – dinotom 2013-03-12 16:56:17