使用mvc中的ajax调用重定向到另一个视图

时间:2013-08-07 07:36:47

标签: asp.net-mvc asp.net-mvc-3 jquery form-submit

我有一个注册表,成功注册后,它会重定向到另一个视图。 我使用提交按钮将数据插入数据库,我想清除当前视图中的值,并将用户重定向到同一控制器下另一个视图中的logon page。 提交类型没有执行jquery中提到的操作。请帮助我

这是我的代码预览

Account/register

Account/logon

 Accountcontroller.cs
      [HttpPost]
     public ActionResult Register(RegisterModel model, FormCollection form)
      {
           try {
                ---code
               }
           catch {
           }
      }

register.cshtml
     @using (Html.BeginForm("Register", "Account", FormMethod.Post, new { id = "accForm"      }))    
           {
             @html.textboxfor(.....)
             @html.textboxfor(.....)
             @html.textboxfor(.....)
             @html.textboxfor(.....)
                    ....
          <input type="submit" value="CreateAccount" class="buttonclass"               title="CreateAccount" ; onclick="SaveUser(this);" 

             }

    function SaveUser(btnClicked) {
           alert("clear");
           document.getElementById("regname").value = '';
           document.getElementById("regusername").value = '';
           document.getElementById("regemail").value = '';
           document.getElementById("regpassword").value = '';


           document.getElementById("regpassword2").value = '';

           $.ajax({
                   url: window.location.pathname + '/Account/Logon',

                   type: 'GET',
               })
               .success(function (result) {
                    alert("user saved successfully");
                     });

更新:  

   function SaveUser(btnClicked) {

       document.getElementById("regname").value = '';
       document.getElementById("regusername").value = '';
       document.getElementById("regemail").value = '';
       document.getElementById("regpassword").value = '';
       document.getElementById("regpassword2").value = '';
       alert('clear');
   $.ajax({


          type: "POST",
           url:  window.location.pathname + "Account/Register",

           success: function (response) {
               $.ajax({
                   url: window.location.pathname + '/Account/Logon',
                   type: 'GET',
               })
        .success(function (result) {
            alert("user saved successfully");

            // window.location ="";
        });
           },
           error: function (xhr, status, error) {
               alert("Failed");
           }
       });
}

我收到了失败警报。 请帮忙

2 个答案:

答案 0 :(得分:1)

如果要在SuccessFul登录时重定向页面,请在成功(ajax成功)上写入重定向代码。 Exp:

$.ajax({
        url: window.location.pathname + '/Account/Logon',
        type: 'GET',
         })
         .success(function (result) {
                    alert("user saved successfully");

         // window.location ="";
          });

答案 1 :(得分:0)

Arun发布的内容完全奏效。但您还必须在客户端站点代码中维护URL。

另一种方法是在控制器中查找发布的请求是否为AjaxRequest。 如果是这样,并且某些条件适用,您可以重定向甚至将部分内容发送回客户端。

查明请求是否是带MVC 4的AjaxRequest的一种方法是

new HttpRequestWrapper(System.Web.HttpContext.Current.Request).IsAjaxRequest() 

或解析ajax属性的请求标头。

这也是关于检测Ajax请求的SO问题 Detecting IsAjaxRequest() with ASP.NET MVC and JQuery Form Plugin / File Upload

好的,如果你考虑使用编译路由在ASP.NET MVC中发布ajaxy东西......

$.ajax({
        url: '@Url.Action( "Register", "Account")',
        data: {model:JSON.stringify(inputs)},
        type: 'POST',

或表单集

$.ajax({
    url: '@Url.Action( "Register", "Account")',
    data: {col :$("form_id").serialize()},
    type: 'POST',

...

在视图中使用@ URL.Action帮助器。 现在,当Register收到ajax请求时,处理服务器上的重定向逻辑......