我尝试了很多方法但仍然无法正常工作......我正在使用ajax调用调用控制器的方法。感谢回答我之前的问题,它工作得很好,我有想要从控制器中的视图发送的数据(在CreateIncident
方法中)。问题是控制器应该呈现新视图并重定向到它,但它没有发生。现在我只想看到新视图,没有别的,我将在稍后处理收到的数据。知道为什么会这样吗?这是因为我用ajax调用方法而不是用例如简单Url.AcionLink
?
Ajax调用方法:
function addMarker(location, fulladdress) {
var data = JSON.stringify(fulladdress) + JSON.stringify(location)
$.ajax({
type: "POST",
url: "Incidents/CreateIncident",
dataType: "text",
data: {JsonStr : data}
})
}
控制器:
public ActionResult Create()
{
Incident newIncident = new Incident();
newIncident.AddDate = DateTime.Today.Date;
newIncident.DateOfIncident = DateTime.Today.Date;
newIncident.TimeOfIncident = DateTime.Today.TimeOfDay;
return this.View(newIncident);
}
[HttpPost]
public ActionResult CreateIncident(string JsonStr)
{
// RedirectToAction("Create"); //none of this three is working
// return View("Create");
return Redirect("Create");
}
无论我是否尝试访问CreateIncident
或Create
,都会调用此方法,但是没有重定向到/事件/创建(我打电话)来自Home / Index)。有什么想法吗?我想直接从Create.cshtml
重定向到CreateIncident
,因此我不必在方法之间传递数据,但任何解决方案都可以。
答案 0 :(得分:3)
在这种情况下,重定向必须通过AJAX调用完成。调用您的操作方法并执行您的逻辑,然后重定向成功。
$.ajax({
type: "POST",
url: "Incidents/CreateIncident",
dataType: "text",
data: {JsonStr : data} ,
success: function (data) {
window.location.href = "Incidents/Create";
}
})
答案 1 :(得分:1)
尝试:
url:"../Incidents/CreateIncident"
输入$ ajax调用错误处理并查看错误,它会帮助你
$.ajax({
type: "POST",
url: "Incidents/CreateIncident",
dataType: "text",
data: {JsonStr : data},
success: function(result){
// Do stuff
},
error: function(xhr){
alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText);
}
});
答案 2 :(得分:0)
使用视图的完整路径而不是其名称。
return View("/Incidents/Create");
答案 3 :(得分:0)
是的,在ajax调用的成功事件中重定向页面是唯一的解决方案,因为您正在进行ajax调用而不是提交表单。只有在发布表单时,浏览器才会在发布后自动重定向。
但是,如果您不想将其重定向,则可以使用以下代码 成功事件。
function postData(url, allData){
form = document.createElement('form');
for(data in allData)
{
var input = document.createElement('input');
input.type = 'text';
input.name = data;
input.value = allData[data].toString();
form.appendChild(input);
}
form.method = 'post';
form.action = url;
form.submit();
}
并使用此功能:
function addMarker(location, fulladdress) {
var data = JSON.stringify(fulladdress) + JSON.stringify(location);
postData('/Incidents/CreateIncident', {JsonStr : data})
}
警告:未经测试:)。