通过JavaScript单击按钮从事件处理程序热重定向ASP.NET

时间:2014-10-14 07:32:00

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

我在回发期间页面没有重定向时出现问题。

我有一个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中编码

提前致谢。

1 个答案:

答案 0 :(得分: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()" />