首页 文章

MVC2 AJAX - 根据返回的数据确定UpdateTargetId

提问于
浏览
1

The scenario:

我正在为MVC2应用程序创建一个登录表单 .

How i'm doing it

表单提交MVC2操作,该操作验证用户名/密码 . 如果验证失败,则操作将返回表单(部分视图)以供用户再次尝试 . 如果它通过验证,则操作将返回用户在登录之前访问的页面(视图) .

What i want to happen:

1 - 提交表单并且用户成功验证时,返回的结果应替换当前页面(如果未设置UpdateTargetId,则会发生这种情况) .

2 - 当提交表单并且用户验证失败时,返回的结果应该替换表单(就像将UpdateTargetID设置为表单的包含元素时会发生的情况) .

The problem:

我可以让这两件事都有效,但不能同时进行 . 我可以让它总是替换当前页面,或者总是只替换UpdateTargetId元素的内容 . 但我需要它能够做到,取决于用户是否成功验证 .

What I need

理想的解决方案是能够检查ajax请求的结果并确定是否使用UpdateTargetId(仅替换表单)(替换整个页面) . 我希望它会涉及到jquery的一些工作(假设它是可能的)但是我对jquery并不是那么好,还没弄明白如何自己做 . 如果不能以这种方式完成,我也会接受其他方法/解决方案,使其以类似的方式工作 .

提前致谢 ..

按照要求 . 行动准则 . 但正如我所说 . 这是每个mvc应用程序默认发布的标准LogOn操作 . 唯一的区别是它在验证失败时返回部分视图 .

[HttpPost]
    [MedLife.Code.Compression.CompressFilter]
    public ActionResult SignIn(LogOnModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (MembershipService.ValidateUser(model.UserName, model.Password))
            {
                FormsService.SignIn(model.UserName, model.RememberMe);
                if (!String.IsNullOrEmpty(returnUrl))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                   return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "The user name or password provided is incorrect.");
            }
        }

        // If we got this far, something failed, redisplay form
        return PartialView("Overlays/LoginControl", model);
    }

2 回答

  • 1

    假设如果登录名/密码无效,则假设您返回带有字符串“INVALID”的Json结果 . 然后使用UpdateTargetId .

    如果Json结果!=“INVALID”,那么你将用新的部分页面替换容器 .

    我就是这样做的,而且效果很好 . :-)

  • 1

    在服务器端代码中,检查验证是否有效,如果没有,则将RedirectToAction返回到您需要的任何完整视图 .

    您遇到的问题是所有应用程序逻辑,而不是显示逻辑,因此应该在Controller而不是视图中完成,以保持您的关注点分离 .

    你必须做一个RedirectToAction(即,不只是返回View(“myViewWhenInvalid”);)因为否则视图将在UpdateTargetID中呈现,这看起来不太好 .

    编辑:

    即:

    public ActionResult myLoginAction(string name, string pwd)
    {
    // do the login stuff
    if (loggedIn) 
    {
    return RedirectToAction(...);
    }
    else
    {
    return MyJsonAction();
    }
    }
    
    public MyJsonAction()
    {
    return some Json...;
    }
    

    PS:我感冒了,不愿意检查我的想法 .

相关问题