重定向/重新加载后的javascript“回调”

时间:2017-11-01 11:22:57

标签: javascript asp.net-mvc

我有一个网站(asp.net mvc razor),其中一些功能需要授权/登录。 例如,可以通过单击按钮来启动这些功能。 通过单击此按钮,系统将检查用户是否已登录。 如果没有,则将用户重定向到他可以登录的登录页面。 之后,他将被重定向到初始页面,而不会启动用户操作。

所以工作流程如下:

- >第x页 - >按钮y - >点击 - >重定向到登录 - >登录 - >重定向到x。 重定向是简单的Url.Action()语句。

我想要做的是动态重定向到点击来自的页面,理想情况下跳转到发件人选择器,以简化用户的工作。

我有什么可能实现这一目标? 我只会想到使用ViewBagstrings

的东西

更新: 信息:由于存储会话变量导致有关并发请求的问题,因此该功能在解决方案范围内被禁用,因此我无法使用会话变量。 此外:主要问题之一是,如果不进行ajax调用或发送表单,我无法登录。通过发送表单或进行ajax调用,我放弃了有关动作的原始发起者和参数的信息。 我通过将其添加到控制器中的所有此类操作来解决此问题:

    [HttpPost]

            public ActionResult ActionA(Guid articleId, Guid selectedTrainerId)
            {

                //if user is not authenticated then provide the possibility to do so
                if (!Request.IsAuthenticated)
                {
                    var localPath = this.ControllerContext.RequestContext.HttpContext.Request.Url?.LocalPath;
                    var parameter = this.ControllerContext.RequestContext.HttpContext.Request.Params["offeringRateId"];

                    var returnUrl = localPath + "?articleId=" + parameter;


                    return PartialView("LoginForOfferingPreview", new LoginForOfferingPreviewViewModel
                    {
                        RequestUrl = returnUrl,
                        //this will be used in the view the request was initiated by in order to repeat the intial action (after login has been successfull)
                        Requester = OfferingPreviewRequester.CourseTrialAdd,
                        //this will be used in the view to initiate the request again
                        RequestParameters = new List<dynamic> { new { articleId = articleId },new { selectedTrainerId = selectedTrainerId }}
                    });


                }

                //actual action
                SendBasketEvent(new CourseAddMessage
                {
                    BasketId = BasketId,
                    OfferingRateId = articleId,

                    SelectedTrainerId = selectedTrainerId,
                    SelectedTime = selectedTime,
                    Participants = selectedParticipants,
                    CurrentDateTime = SlDateTime.CurrentDateTimeUtc(SlConst.DefaultTimeZoneTzdb),
                    ConnectionId = connectionId
                }, connectionId);


                return Json(JsonResponseFactory.SuccessResponse());
            }


the hereby returned view for login contains following js code that is called if the login has been succesfull:


    function onLoginFormSubmit(data) {
     //serialize form containing username+pw
        var datastring = $("#loginForm").serialize();

        $.ajax({
            type: "POST",
            url: '@Url.Action("Login_Ajax","Account",new {area=""})',
            data: datastring,
            success: function (data) {
                debugger;
// display model errors if sign in failed
                if (!!!data.Success) {
                    $(".buttons-wrap").append('<span id="loginFormError" style="color:red;"></span>');
                    $("#loginFormError").append(data.ErrorMessage);

                }

    //call method of initiating view that will decide what to dow now
                if (data.Success) {
                    var parametersObjectAsString = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model.RequestParameters))'); 
                    window.onLoginForOfferingPreviewSuccess('@Model.RequestUrl', parametersObjectAsString, '@((int)Model.Requester)');;
                }



            },
            error: function () {


            }
        });

    }

这可以正常工作,因为长的sigining不会因用户名或pw错误而失败。 如果发生这种情况,视图会显示错误,但现在再次登录某些东西真的很奇怪: 起初看起来像第一次成功登录似乎很有效,但是窗口函数onLoginForOfferingPreviewSuccess中的ajax调用将始终到达错误块,而无法告诉您原因。 Fiddler揭示了奇怪的http共振代码,如227,556或其他什么

THX

0 个答案:

没有答案