【问题标题】:jQuery resets when C# method is run运行 C# 方法时 jQuery 重置
【发布时间】:2016-03-12 18:58:07
【问题描述】:

我有一个“时事通讯”小部件,当用户按下按钮时它可以展开。展开的容器内是一个输入框以及一个“提交”按钮。我的代码隐藏检查电子邮件是否有效,如果有效则发送邮件。如果电子邮件无效,则会将错误消息放入标签中。

问题是当我单击提交按钮时,jQuery 函数会重置并且容器不再展开。

$('.widget').click(function () {
    $('.widget').addClass('wdly');
    $('.widly').addClass('window');
});

$('.hide1').click(function () {
    $('.widget').removeClass('wdly');
    $('.widly').removeClass('window');
});
<div class="widget">
    <span class="mail" style="margin-left: 3px">Newsmail</span>
</div>
<div class="widly">
    <span class="hide1"></span>
    <asp:TextBox ID="txtEmail" runat="server" CssClass="form-control newsmail"></asp:TextBox>
    <asp:Label ID="emailRegEx" runat="server" Text="Label" style="position:absolute; margin-top: 50px; margin-left: 60px;" Visible="false"></asp:Label>
    <asp:Button ID="submit" runat="server" Text="Submit" CssClass="btn btn-lg btn-success submit" OnClick="submit_Click1" />            
</div>
protected void submit_Click1(object sender, EventArgs e)
{
    if (Regex.IsMatch(txtEmail.Text, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", RegexOptions.IgnoreCase))
    {
        // send email
    }
    else
    {
        emailRegEx.Visible = true;
        emailRegEx.Text = "Invalid E-mail format";
    }
}

我想我正在寻找的是某种部分负载,它使 DOM 记住我的小部件的当前设置,而不是将其回滚到初始设置。

【问题讨论】:

  • 问题是因为单击按钮会导致页面重新加载(因为数据往返于服务器),因此页面从其起始状态再次加载。如果您想避免这种情况,您要么需要存储页面状态(cookies、sessionStorage、localStorage 等),要么更改页面逻辑以使用 AJAX。后者更可取,尽管当您的一只手被 WebForms 绑在背后时可能是一个复杂的过程。
  • 您正在发布到服务器,因此页面会完全重新加载。如果您想要部分更新,请使用 UpdatePanel 或进行您自己的 ajax 调用。
  • 嗯,我从来没有在我的学校学习过 .NET MVC。但是我对ajax的经验很模糊。你知道我应该在这个问题上寻找什么 - 教程等吗?
  • 我只是简单地浏览了一下。如果我理解正确,我会留下 ajax 来处理回发,以便“ajax 更新”而不是整个页面?

标签: javascript c# jquery asp.net


【解决方案1】:

当调用页面的单击事件被回发时,jquery 事件不会触发。您需要在 JavaScript 中分配部分回发处理程序。

function functionname() {
   // do something
}
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(functionname);

【讨论】:

  • 感谢您的回答。但是我不确定这里发生了什么,以及我应该如何将我的脚本调用到这个函数中?
  • 将所有代码放在一个函数中。调用该函数 document.ready 事件并注册以及我用 sys.webforms.pagerequest 描述...
  • 所以应该没有任何问题。将您的脚本放在页面末尾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多