0

我有一个输入

<input type="button" id="test" value="test" />

我对“主页”控制器的操作:

public ActionResult DataUsage(DateTime startDate, DateTime endDate, string userName)
{
  var data = FetchDataFromDB(startDate, endDate, uName);
  return PartialView("DataUsageChartViewPartial", data);
}

我要在其中加载结果表单 DataUsage 的 div

<div id="myChart"></div>

jQuery代码

$(function() {
    $("#test").click(function () {
        $.ajax({
               url: '/Home/DataUsage',
               type: 'POST',
               data: { startDate: $('#startDate').val(), endDate: $('#endDate').val(), userName: $('#userName').val() },
               success: function (result) {
                   alert("success " +result);
              },
              error: function (err) {
                 alert("error "+err);
             }
            });
            return false;
        });
    }
 );

当我单击按钮时,我希望 div(myChart) 填充控制器中操作的结果。我不确定我的 jQuery 是否正确,因为我不断收到错误并且我的控制器/动作中的断点从未被命中。有人可以告诉我我做错了什么以及如何纠正它

4

3 回答 3

1

确保您在文本框中输入的日期格式正确并与您的服务器端文化设置相匹配。例如,根据您的应用程序配置的文化,12/15/2012 和 15/12/2012 可能向用户指示相同的日期,具体取决于用户来自哪里,但默认模型绑定器将使用当前的文化设置。

另外要调试这些问题,请使用 javascript 调试工具(例如 FireBug)并检查 AJAX 请求。如果您这样做了,您将看到从服务器发送的确切错误消息,在您的情况下,该消息应该很长:15/12/2012is not a valid DateTime

于 2012-07-09T10:00:50.760 回答
1

伙计,初学者代码中的问题是您已经为 Ajax 指定了 Post 方法来调用控制器,而根据您放置的代码显示该方法在 get 方法中可用。最简单的方法是[HttpPost]在控制器操作方法上添加注释。

即控制器中的方法如下所示:

[HttpPost]
public ActionResult DataUsage(DateTime startDate, DateTime endDate, string userName)
{
  var data = FetchDataFromDB(startDate, endDate, uName);
  return PartialView("DataUsageChartViewPartial", data);
}

所以这将解决断点没有被调用的问题。

当您想提供要从 ajax 或任何地方调用的 url 时,建议的其他事情始终是用户 Url.Action(...) 方法。否则在部署等时可能会产生问题。

于 2012-07-09T10:09:07.517 回答
0

莫里斯,

我认为这很可能是一个非常简单的情况,即没有调用正确的 url。您应该尝试在 mvc 中使用帮助程序:

url: '@Url.Action("DataUsage", "Home")'

此外,您可能希望使用 HttpPost 装饰您的操作,以确保它与您的 ajax 类型一致,即:

[HttpPost]
public ActionResult DataUsage(...)

如果不能完全解决问题,这应该会让您更近一步。

最后一步是确保在“调用”视图中有一个名为“myChart”的 div,然后按如下方式填充它:

<div id='myChart'></div>

success: function (result) {
    $('#myChart').html(result);
}

希望这可以帮助

于 2012-07-09T09:55:36.550 回答