我试图通过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"] })%>">
>></a>
但我想在jQuery中做到这一点(或直接编辑)......
答案 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' });