asp.net - jQuery 调用时 RedirectToAction 不起作用?

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

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

调用使用 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<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 做与操作链接完全相同的事情,即调用操作方法来获取编辑 View ...

例如,此操作链接工作正常,调用名为 Next 的操作方法,该方法重定向到“编辑”并显示新的周和年 View :

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

但我想在 jQuery 中执行此操作(或直接编辑)...

最佳答案

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

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

或者直接使用.load()方法:

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

关于asp.net - jQuery 调用时 RedirectToAction 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545901/

相关文章:

javascript - Chosen 获取选择的选项自定义属性

php - 如何在php中使用表单发送id

c# - 如何为 .net core MVC Web 应用程序创建和显示 PDF 文件?

ASP.NET MVC 模板助手 - 如何获取小写 ID

c# - 覆盖 DLL 中的 DataModel

javascript - XrmSvcToolkit 问题仅获取最多 5000 条记录

asp.net - 使用 ASP.NET MVC 进行母版页中的消息控制

asp.net-mvc-2 - ASP.NET MVC2 - 如何创建表单?

asp.net-mvc - ASP.NET MVC - 根据查询字符串过滤要调用的操作

asp.net - 设置一个asp :DropDownList的html 'name'属性