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

时间:2010-12-28 12:08:02

标签: asp.net jquery asp.net-mvc-2 redirecttoaction

我试图通过jQuery调用一个action方法,并在这里传递参数得到帮助:Calling action method in MVC with jQuery and parameters not working。但是,即使参数现在正确发送,在操作方法中我需要重定向(传递相同的参数)到另一个操作方法。在调试器中,我可以看到重定向已执行,参数仍然存在,但返回的视图没有相应更新...

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

jQuery调用的动作方法:

    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<Customer> 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 = '<%: Url.Action("Edit") %>';
            $.get(url, { number: week, year: year }, function (data) {
                //                    alert('Test');
            });
        });
    }

同样,它是否使用不正确的get?我不希望在html标签中加载内容,我只是想使用jQuery做与actionlink完全相同的事情,即调用一个动作方法来获取编辑视图......

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

<a href="<%=Url.Action("Next", new { number=ViewData["WeekNumber"], year = ViewData["Year"]   })%>">
            &gt;&gt;</a>

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

1 个答案:

答案 0 :(得分:3)

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' });
相关问题