我正在尝试通过 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"] })%>">
>></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/