MVC控制器的方法没有返回视图

时间:2016-01-06 18:41:51

标签: c# ajax asp.net-mvc

我尝试了很多方法但仍然无法正常工作......我正在使用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");
    }

无论我是否尝试访问CreateIncidentCreate,都会调用此方法,但是没有重定向到/事件/创建(我打电话)来自Home / Index)。有什么想法吗?我想直接从Create.cshtml重定向到CreateIncident,因此我不必在方法之间传递数据,但任何解决方案都可以。

4 个答案:

答案 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})
}

警告:未经测试:)。