我可以使用ASP.NET MVC4作为ActionResult发送消息而不是视图

时间:2013-01-01 17:02:30

标签: javascript jquery asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我在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;
 });

如果注册有效,我想强制整个网页刷新。在那儿 我可以将动作方法中的消息发送回javascript 的方式 告诉它注册工作,javascript应该刷新整体 网页?

我确实尝试过返回RedirectToLocal(“/”);但这肯定不起作用。什么 这样做是为了返回一个新页面,然后在#article DIV中填充它。

2 个答案:

答案 0 :(得分: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代替页面刷新,您不会丢失页面状态,例如错误消息。

答案 1 :(得分:0)

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

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

这将重新加载页面上的成功。