【问题标题】:ASP.NET redirect from event handler hot by button clicked by JavaScriptASP.NET 通过 JavaScript 单击的按钮从事件处理程序热重定向
【发布时间】:2014-10-14 07:32:00
【问题描述】:

我在回发期间遇到页面未重定向的问题。

我有一个包含此内容的 aspx 页面:

<td class="tdinput" align="right">
    <asp:Button ID="ButtonFrigiv" runat="server" Text="Frigiv sag" CssClass="button"
        OnClientClick="verifyReleaseOtherEmployeesCase()" />
    <asp:Button runat="server" ID="ButtonFrigivHidden" OnClick="ButtonFrigiv_Click" 
        Style="display: none;" UseSubmitBehavior="true" />
</td>

该页面还包含各种 UpdatePanel,但是上面的代码不包含在一个中。 可以看到有一个按钮正在显示,它调用以下 JavaScript:

function verifyReleaseOtherEmployeesCase() {
    var logonUser = document.getElementById('<%= HiddenLogonUser.ClientID %>');
    var lockedBy = document.getElementById('<%= HiddenLockedBy.ClientID %>');

    var button = document.getElementById('<%= ButtonFrigivHidden.ClientID %>');

    if (logonUser.value == lockedBy.value) {
        button.click();
    }
    else if (confirm("Danish confirm message")) {
        button.click();
    }
    else {
        return;
    }
}

所以基本上这个 JavaScript 找到上面的第二个按钮(它没有显示给用户)并点击它。 单击该按钮时,服务器上会到达以下事件处理程序:

protected void ButtonFrigiv_Click(object sender, EventArgs e)
{
    NyeSagerDAC.FrigivSag(SagID, LogonUser);
    Response.Redirect(LastList);
}

其中 LastList 是一个字符串,其中包含作为当前页面入口点的页面(有多个入口点)。 到达服务器方法并且该方法中的第一行完美执行,但是页面没有被重定向。 我已经使用事件处理程序中的以下代码对它是否可能被视为 AJAX 回调(不允许重定向)进行了一些测试:

HttpRequest request = HttpContext.Current.Request;
string header = request.Headers["X-MicrosoftAjax"];

字符串头的内容为空,并且在事件处理程序完成后调用 Page_Load。所以我认为这不是问题。

我还尝试注册一个启动脚本来让页面自行重定向。这已经通过各种方式进行了尝试:

Page.ClientScript.RegisterStartupScript(GetType(),"redirect",
    "window.location.href='" + LastList + "'");

ScriptManager.RegisterStartupScript(this, this.GetType(), "redirect",
    "window.location.href='" + LastList + "';", true);

但是,这些似乎都不起作用。 我唯一要做的就是删除 JavaScript 的 confirm() 部分并让它单击按钮。这导致页面被正确重新加载。但是,我需要询问用户是否真的想要解锁其他员工的任务。

所以我认为我的问题是:如何让页面重定向?或者,如何修改 JavaScript 以仍然要求用户确认并且不停止重定向工作?

解决方案采用 .NET 4.0 编码

提前致谢。

【问题讨论】:

    标签: javascript asp.net .net c#-4.0 postback


    【解决方案1】:

    您的 js 函数名为 verifyReleaseOtherEmployeesCase,但在 OnClientClick 中显示为 verifyReleaseOtherWorkersCase,假设这是一个错字,您还需要防止第一个按钮执行回发。

    注意js函数中的false返回和OnClientClick中的返回

    function verifyReleaseOtherEmployeesCase() {
        var logonUser = document.getElementById('<%= HiddenLogonUser.ClientID %>');
        var lockedBy = document.getElementById('<%= HiddenLockedBy.ClientID %>');
    
        var button = document.getElementById('<%= ButtonFrigivHidden.ClientID %>');
    
        if (logonUser.value == lockedBy.value) {
            button.click();
        }
        else if (confirm("Danish confirm message")) {
            button.click();
        }
    
        return false;
    }
    
     <asp:Button ID="ButtonFrigiv" runat="server" Text="Frigiv sag" CssClass="button"
        OnClientClick="return verifyReleaseOtherEmployeesCase()" />
    

    【讨论】:

    • 效果很好。谢谢!关于错字,实际代码中不存在。不过,感谢您的关注。我只是觉得我缺乏正确的 JavaScript 知识来知道为什么函数必须返回 false。
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2010-10-25
    相关资源
    最近更新 更多