【问题标题】:How to fadein server control using jQuery?如何使用 jQuery 淡入服务器控件?
【发布时间】:2014-05-14 02:47:12
【问题描述】:

我有两个网络表单面板,我根据代码隐藏中的点击事件显示和隐藏它们。 这是默认状态:

pnlStepOne.Visible = true;
pnlStepTwo.Visible = false;

在按钮 (#btnStepOne) 单击事件上,我目前通过切换可见性值来更改面板的可见性:

protected void btnStepOne_Click(object sender, EventArgs e)
{
pnlStepOne.Visible = false;
pnlStepTwo.Visible = true;
}

这部分效果很好。但是,我想淡入 pnlStepTwo,而不是通过更改可见性设置立即显示它。

我尝试过这样做:

$("#btnStepOne").click(function (event) {
    $('#pnlStepTwo').fadeIn(3000);
});

但这似乎不起作用。我认为这是因为 pnlStepTwo 还不可见。

我如何才能淡入 #pnlStepTwo 而不是立即显示它?

编辑

这是我在 pnlStepOne 上的验证码:

 $("#<%=btnStepOne.ClientID%>").click(function (event) {

            var fvFname = document.getElementById('fvFname');
            var fvLname = document.getElementById('fvLname');

            ValidatorValidate(fvFname);
            ValidatorValidate(fvLname);

            if (!fvFname.isvalid || !fvLname.isvalid) {
                $("#<%=pnlStepOne.ClientID%>").effect("shake");
            }

            if (fvFname.isvalid && fvLname.isvalid) {

                $('#<%=pnlStepOne.ClientID%>').hide();
                $('#<%=pnlStepTwo.ClientID%>').fadeIn(500);

            }
        });

【问题讨论】:

  • 我已根据您的要求创建了一个示例!

标签: c# jquery asp.net panel fadein


【解决方案1】:

控件的Visibility 属性不允许在页面中呈现。而是使用display:none 使用javascript

使用 Javascript 隐藏面板:

<script type="text/javascript">
function ShowPanelTwo()
{
  $('#<%=pnlStepOne.ClientID%>').css("display","none");
  //$('#<%=pnlStepTwo.ClientID%>').css("display","block");
  $('#<%=pnlStepTwo.ClientID%>').fadeIn(3000);

}

</script>

从代码隐藏调用:

protected void btnStepOne_Click(object sender, EventArgs e)
{
    Page.ClientScript.RegisterStartupScript(this.GetType(), "uniquekey", "<script type='text/javascript'>ShowPanelTwo();</script>");
}

你也可以使用:

$("#<%=btnStepOne.ClientID%>").click(function (event) {
   $('#<%=btnStepTwo.ClientID%>').fadeIn(3000);
});

希望这会有所帮助!

【讨论】:

  • 我会用 JQuery 的方式来做,因为在 Click 代码后面的事件中注册脚本会导致不必要的往返。
  • 所以我也通过 Jquery 给出了解决方案!通过考虑发布的用户在代码中注册脚本,如果他想做一些服务器端操作,例如数据操作,因此我提供了两个选项,您可以根据您的要求进行选择! :)
  • 感谢大家的建议。 Shekhar 上面建议的代码可以工作,并允许我淡入和淡出面板。但是,如果我不使用“可见”属性并通过 jQuery 隐藏面板,则整个表单(pnlStepOne 和 pnlStepTwo 上的所有文本字段)都将被验证。这意味着如果我在第一个面板上,如果不填写 pnlStepOne 必填字段,我将无法进入 pnlStepTwo。这一切都很好,但是一旦我淡入 pnlStepTwo,文本字段(在 pnlStepTwo 上)已经无效,显示缺少信息验证错误。知道如何解决吗?
  • 我在 pnlStepOn 上的验证码在我原来的帖子中作为编辑提供
  • 请多解释一下..这样我可以帮助你!如果解决了问题,请标记为答案!
【解决方案2】:

C# 代码中的Visible 属性将阻止面板在 HTML 页面上呈现。所以你是对的,你的 JQuery 代码看不到它,因为它还不可见。

我会让pnlStepTwo 可见,然后用style="display:none" 隐藏它。您也需要阻止提交按钮发回,因为它所做的只是更改 Visible 服务器端属性。

另外,为了确保您的客户端 javascript 可以在 DOM 中看到正确的元素,请以这种方式引用它:

$("#<%=btnStepTwo.ClientID%>")

这将使您的应用程序在实际呈现时返回该元素的 HTML id。有时渲染引擎会返回服务器端 ID 属性的变体,因此您的客户端 ID 实际上可能类似于 ContentPlaceHolder1_btnStepTwo

【讨论】:

  • @Vasek 作为使用$("#&lt;%=btnStepTwo.ClientID%&gt;") 的替代方法,您可以将控件上的ClientIMode 设置为Static,这将强制它在客户端上使用它在服务器上使用的相同ID。然后你可以简单地做$("#btnStepTwo")。您实际上可以从web.config 文件中将默认模式设置为静态,请参阅this excellent article
  • 您必须小心使用静态 ID 模式,尤其是在较大的应用程序中。如果一个控件在一个页面上多次呈现(它位于另一个重复的控件(如 gridview)内,或者在同一页面上使用的不同 .ascx 中具有相同 ID 的两个控件),它将不会为这些控件生成唯一 ID,这意味着你必须小心自己生成它们。
猜你喜欢
  • 1970-01-01
  • 2012-12-12
  • 2012-07-27
  • 2010-12-24
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
相关资源
最近更新 更多