0

我在 ASP.NET MVC4 中有以下操作

    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
                WebSecurity.Login(model.UserName, model.Password);
                // ?? Need some code here 
            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

我有以下代码调用它:

$('#article').on('submit', '#loginForm, #registerForm', function (e) {
     e.preventDefault();
     var $form = $(this);
     var href= $form.attr('data-href');
     $form.validate();
     if (!$form.valid()) {
         return false;
     }
     var data = $form.serializeArray();
     $.ajax(
     {
         data: data,
         type: 'POST',
         url: href
     })
         .done(submitDone)
         .fail(submitFail);
     function submitDone(content) {
         $('#article').html(content)
     }
     function submitFail() {
         alert("Failed");
     }
     return false;
 });

如果注册有效,我想强制刷新整个网页。有没有办法让我从 actionmethod 向 javascript 发回一条消息,告诉它注册有效并且 javascript 应该刷新整个网页?

我确实尝试过 return RedirectToLocal("/"); 但这绝对行不通。它的作用是返回一个新页面,然后将其填充到#article DIV 中。

4

2 回答 2

0

没有什么会自动从服务器刷新浏览器。

要从服务器刷新浏览器,您需要从服务器向客户端发送一些信息,表明您要刷新页面。您需要编写 javascript 来寻找刷新浏览器的指示。

客户代码

function submitDone(content) {

 var json = $.parseJson(content);

  if(json.isSuccess) {

   //Do something here   

  }

     $('#article').html(json.content)

 }

服务器代码

public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
                WebSecurity.Login(model.UserName, model.Password);
                // ?? Need some code here 
            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

    // If we got this far, something failed, redisplay form
    return Json(new {isSuccess = true, content = model});
}

如果要清除表单字段,我不确定您要通过刷新页面来完成什么。同样可以通过使用 JavaScript 来实现。通过使用 javascript 而不是页面刷新,您不会丢失页面状态,例如错误消息。

于 2013-01-01T17:26:29.517 回答
0

好吧,我可以想到一个快速的javascript技巧来刷新这样的成功页面

function submitDone(content) {
     window.location.reload();
 }

这将成功重新加载页面。

于 2013-01-02T16:30:58.117 回答