【问题标题】:How to use ajax request to get data from controller in asp.net mvc如何使用ajax请求从asp.net mvc中的控制器获取数据
【发布时间】:2016-09-15 14:16:28
【问题描述】:

我对 ajax 有点陌生。

我试图从我的控制器中的方法获取数据,我已经编写了 ajax 代码,但似乎没有完成这项工作(没有从控制器中提取数据)也许我在 ajax 的控制器中遗漏了一些东西请求。

我有两个下拉列表,我正在尝试根据另一个下拉列表的选择来填充下拉框,我正在尝试从我不知道如何纠正的控制器中的方法中更正数据。

我真的很感激在这个问题上的一些指导或帮助

谢谢你

 public ActionResult ptdrFilter(int id)
    {
        //IUnitOfWork uow = DataAccess.GetUnitOfWork();
        using (ManageProductTemplate ptLogic = new ManageProductTemplate(ref uow))
        {
            List<ProductTemplate> currentpt = ptLogic.GetBy(x => x.ProductTemplateID == id);

            List<string> pt = new List<string>();
            foreach (var item in currentpt)
            {
                pt.Add(item.DistributionRule.Name);

            }
            return Json(new {

                pt


            } , JsonRequestBehavior.AllowGet);
        }
    }

 function drFilter() {

    $.ajax({
        type: "json",
        data: {id: 1},
        url:"/ptdrFilter/",
success: function(result) {
    drFilter(result);
}
    });
        var dataInJSONForm = JSON.stringify(sampleData);
        var datainJSObjectForm = JSON.parse(dataInJSONForm);

        $('#dd1').on('change', function (e) {
            var valueChosenInddl2 = $(this).val();
            var options = datainJSObjectForm[valueChosenInddl2];



            var $subselect = $('#subselect');
            $subselect.children().detach();
            for (var property in options) {
                $subselect.append($('<option>', { value: property, text: options[property] }));

}

【问题讨论】:

  • 更具体的问题...您想要实现什么,发生了什么?结果将包含一个名为 pt 的对象。
  • 我已经编辑了这个问题。是的,它将作为 pt 包含数据列表
  • “似乎没有完成这项工作”。 究竟是什么问题?哪里失败了?
  • 它确实从控制器中提取数据
  • 好的。所以它做到了。它做什么?你说它失败了,但你没有说如何。你有错误吗?

标签: jquery json ajax asp.net-mvc ajax-request


【解决方案1】:

这里有几个明显的问题:

1)

function drFilter() {

  $.ajax({
    type: "json",
    data: {id: 1},
    url:"/ptdrFilter/",
    success: function(result) {
     drFilter(result);
    }
 });
...

将产生一个无限循环。当 ajax 调用完成(成功)时,它会再次调用 drFilter(),这将立即再次进行 ajax 调用,以此类推。

2) 我认为它失败了,因为 URL 错误。在 cmets 中,您提到了 404 Not Found 错误——这意味着它到达了错误的 URL。 MVC 使用 URL 路由,因此最好让 MVC 为您生成 URL。您可以使用 HTML 帮助器来执行此操作,如下所示:

url: @Url.Action("ptdrFilter")

您的浏览器还报告“sampleData”变量未定义。在您尝试将其传递给 JSON.stringify() 方法之前,您发布的代码中没有任何地方显示此变量已定义或填充。我猜这可能是您尚未删除的测试代码。

【讨论】:

  • 谢谢,我会尝试使用此方法。这是我创建了一个变量的测试代码: // var sampleData = { Default: { value1: "text", value2: "text" }, PTDR: { value1: "cal", value2: "cal" }, All :{值1:“lool”,值2:“loool”}};为了确定它是否根据第一个下拉列表的选择填充了第二个下拉列表。因为我不会使用你的 sampledata 变量,所以第二个下拉列表是通用的如何填充自己。对 ajax 的新问题感到抱歉,并且仍在学习它
  • 我无法真正回答它将如何具体地填充另一个下拉列表 - 您没有解释或显示足够的代码让我给出详细的答案。你问了ajax问题,我希望我已经解决了。我还指出了另一个明显的问题,因为我可以看到它。如果答案可以帮助您解决 ajax 问题,请标记为已接受。如果您有第二个问题,请在 SO 上创建一个新问题 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 2013-05-08
相关资源
最近更新 更多