当jQuery调用时,RedirectToAction无法正常工作?

我试图通过jQuery调用一个动作方法,并在这里获取传递参数的帮助: 使用jQuery调用MVC中的动作方法,参数不起作用 。 但是,即使参数现在正确发送,在操作方法中我需要重定向(传递相同的参数)到另一个操作方法。 在调试器中,我可以看到重定向已执行,参数仍然存在,但返回的视图不会相应更新…

调用使用jQuery重定向的动作方法有问题吗?

jQuery调用的Action方法:

public ActionResult SelectDate(string date) { DateTime dateObject = DateTime.Parse(date); MyCalendar calendar = new MyCalendar(); string number = calendar.GetWeekNumber(dateObject).ToString(); string year = dateObject.Year.ToString(); return RedirectToAction("Edit", new { number = number, year = year }); } 

动作方法重定向到:

  public ActionResult Edit(string number, string year) //Why string here??? { int n; if (string.IsNullOrEmpty(number)) n = myCalendar.GetWeekNumber(DateTime.Today); else n = Int32.Parse(number); int y; if (string.IsNullOrEmpty(year)) y = DateTime.Today.Year; else y = Int32.Parse(year); List customers = _repository.Customers; ViewData["Customers"] = new SelectList(customers, "CustomerId", "CustomerName"); ViewData["WeekNumber"] = n; ViewData["Year"] = y; return View(); } 

或者jQuery get()不是调用动作方法来加载新页面的正确方法吗? 请注意,使用ActionLink做同样的事情工作正常,我只需要通过jQuery调用它,因为我使用的是datepicker插件,还有一个按钮作为调用操作的方式。

我究竟做错了什么?

更新:

实际上,RedirectToAction似乎不是问题,我修改了代码,以便jQuery现在直接调用最终的动作方法(直接在jQuery中完成第一个动作方法的工作,即将日期转换为星期和年份)。 但我仍然没有获得新的一周和一年的新页面。

这是新的jQuery:

  function selectWeek() { $('#selectWeekButton').click(function (event) { var date = $('#selectWeekId').val(); var selectedDate = new Date(date); var year = selectedDate.getFullYear(); var week = selectedDate.getWeekOfYear(); var url = ''; $.get(url, { number: week, year: year }, function (data) { // alert('Test'); }); }); } 

再次,它是否使用不正确的get? 我不希望在html标签中加载内容,我只是想使用jQuery来执行与actionlink完全相同的操作,即调用action方法来获取Edit View …

例如,此actionlink工作正常,调用名为Next的操作方法,该方法重定向到Edit并显示新的周和年视图:

 <a href="https://stackoverflow.com/questions/4545901/redirecttoaction-not-working-when-called-by-jquery/"> >> 

但我想在jQuery中做到这一点(或直接编辑)…

jquery AJAX自动跟随重定向,这意味着在成功回调中,您将获得已重定向到的Edit操作的结果。 在此回调中,您将获得控制器操作返回的部分HTML。 因此,如果您想更新DOM的某些部分,则需要明确指示它:

 $.ajax({ url: '<%= Url.Action("SelectDate") %>', data: { date: '123' }, success: function(result) { $('#someresultDiv').html(result); } }); 

或者只是使用.load()方法:

 $('#someresultDiv').load('<%= Url.Action("SelectDate") %>', { date: '123' });