【问题标题】:How can I change the style of a div on return from a form submit action in Razor MVC3?如何在 Razor MVC3 中的表单提交操作返回时更改 div 的样式?
【发布时间】:2012-11-28 09:40:43
【问题描述】:

我有一个带有表单和提交按钮的 Razor/ASP/MVC3 Web 应用程序,它会在服务器上执行一些操作,然后再发回表单。通常会有一些延迟,重要的是用户知道他们应该在关闭页面或在网站上做其他事情之前等待它完成并确认,因为似乎用户正在这样做,有时他们的工作还没有被处理假设它有。

所以,我在一个隐藏的 Div 中添加了一个“正在保存,请稍候...”微调器,当他们按下提交按钮时,该微调器变得可见,效果非常好,但我无法找到一种方法来获取操作完成后,Div 会重新隐藏。

我的微调器 Div 是:

<div id="hahuloading" runat="server">
  <div id="hahuloadingcontent">
    <p id="hahuloadingspinner">
        Saving, Please Wait...<br />
        <img src="../../Content/Images/progSpin.gif" />
    </p>
  </div>
</div>

它的 CSS 是:

#hahuloading
{
    display:none;
    background:rgba(255,255,255,0.8);
    z-index:1000;
}

我让“请稍候”微调器出现在可见按钮的 JS 方法中,它像这样调用实际的提交按钮:

    $(document).ready(function () {
        $("#submitVisibleButton").click(function () {
            $(this).prop('disabled', true);
            $("#myUserMessage").html("Saving...");
            $("#myUserMessage").show();
            $("#hahuloading").show();
            document.getElementById("submitHiddenButton").click();
        });
    });

我的视图模型代码被调用、执行操作并返回一个字符串,该字符串设置了显示正常的用户消息内容,但是当我尝试在示例中执行一些代码时,我看到了:

        // Re-hide the spinner:
        Response.write (hahuloading.Attributes.Add("style", "visibility:hiddden"));

它告诉我“当前上下文中不存在 hahuloading”。 是否有某种方法我应该在视图模型中定义一个变量,该变量将对应于 Div,以便我可以从服务器的操作处理程序中设置它的可见性? 或者,我可以让 div 显示以某个值为条件,以在页面从操作返回时起作用吗? 或者,无论如何,谁能帮我弄清楚如何在服务器操作完成后重新隐藏我的 div?

谢谢!

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    这是用 ajax 完成的吗?我会假设是因为页面没有被重定向。试试这个:

    $(document).ready(function () {
        $("#submitVisibleButton").click(function () {
            $(this).prop('disabled', true);
            $("#myUserMessage").html("Saving...");
            $("#myUserMessage").show();
            $("#hahuloading").show();
            document.getElementById("submitHiddenButton").click();
        });
        $("#hahuloading").ajaxStop(function () {
         $(this).hide();
        });
    });
    

    顺便说一句,您不再需要runat=server

    【讨论】:

    • 谢谢特拉维斯。是的,它正在使用 Ajax。
    • 我尝试了你的建议,然后......哇......它奏效了!谢谢你!耶!嗯,我不知道为什么会这样或者它做了什么,对此有点陌生。你能解释一下吗?哇,虽然这很棒。再次感谢!
    • @Dronz - 很高兴你喜欢它 :) “每当一个 Ajax 请求完成时,jQuery 都会检查是否还有其他未完成的 Ajax 请求。如果没有,jQuery 会触发 ajaxStop 事件。任何和所有处理程序已经注册的 .ajaxStop() 方法此时执行。" api.jquery.com/ajaxStop
    • 啊哈!很酷,谢谢你的解释。我以前没有使用过那个ajaxStop。很高兴知道这一点。
    猜你喜欢
    • 2011-11-06
    • 2017-05-23
    • 1970-01-01
    • 2011-12-03
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    相关资源
    最近更新 更多