Ajax发布不工作的MVC 5

时间:2015-12-04 14:42:05

标签: c# ajax asp.net-mvc

我正在尝试将数据发布到控制器中,但它似乎不起作用,我需要帖子在完成后将视图内容包含到div中但我无法实现它

这是我的js函数:

SELECT *
FROM schedules
INNER JOIN 
(
    SELECT person_id, SUBSTRING_INDEX(GROUP_CONCAT(schedule_id ORDER BY DATEDIFF(end_date, start_date)), ',', 1) AS best_schedule_id
    FROM schedules
    WHERE person_id = 1 
    AND start_date <= CURDATE() AND end_date >= CURDATE
    GROUP BY person_id
) sub0
ON schedules.schedule_id = sub0.best_schedule_id
AND schedules.person_id = sub0.person_id

而且,这是我的控制器:

function show(num) {
    $.ajax({
        dataType: "html",
        type: "POST",
        url: "Student/Schedule",
        data: { number: num },
        success: function (a) {
            // Replace the div's content with the page method's return.
            alert("success");
            $('#schedule').load(a);
        }
    });
}

我是MVC和C#的菜鸟,所以欢迎任何帮助。

3 个答案:

答案 0 :(得分:2)

有些事情你应该解决这个问题。

  • 将网址更改为"/Student/Schedule"

    您使用"Student/Schedule"作为网址,因此您尝试调用名为“学生”的操作。

  • [HttpPost]添加到您的操作中。

  • 您应该return PartialView("Schedule", number);

    当您使用return View(number)时,它使用数字的字符串值作为您的视图名称。您应该明确传递视图名称和模型。

  • 使用$('#schedule').html(a);

最好在ajax调用中添加一个错误函数,以便能够找到错误:

error: function (jqXHR, textStatus, errorThrown) { 
    alert(errorThrown); 
    //or you can put jqXHR.responseText somewhere as complete response. Its html.
}

答案 1 :(得分:1)

您的操作应该返回部分视图,而不是视图。

将您的操作更改为:

[HttpPost]
// by the way use string instead of String
public ActionResult Schedule(string number) 
{
    return PartialView("_Schedule", number);
}

然后,您需要创建名为_Schedule.cshtml的部分视图。

另外,您需要将$('#schedule').load(a);更改为$('#schedule').html(a);而且,我建议您使用Url.Action在您的ajax调用中设置您的网址,如下所示:

function show(num) {
    $.ajax({
        dataType: "html",
        type: "POST",
        url: '@Url.Action("Schedule", "Student")',
        data: { number: num },
        success: function (a) {
            // Replace the div's content with the page method's return.
            alert("success");
            $('#schedule').html(a);
        }
    });
}

答案 2 :(得分:1)

我有同样的问题,我所做的是将jquery.unobtrusive-ajax.js添加到我的脚本