如何在asp.net中使用ajax请求从控制器中获取数据mvc

如何在asp.net中使用ajax请求从控制器中获取数据mvc

问题描述:

我对ajax很陌生。如何在asp.net中使用ajax请求从控制器中获取数据mvc

我想从我的控制器中的一个方法获取数据,我写了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] })); 

}

+0

更具体的问题...你想达到什么,发生了什么?结果将包含一个名为'pt'的对象。 –

+0

我编辑了这个问题。是的,它将作为PT包含数据列表 – user5813072

+0

“似乎没有做这项工作”。什么_exactly_是问题?它在哪里失败? – ADyson

有几个明显的问题在这里:

1)

function drFilter() { 

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

将产生无限循环。当ajax调用完成(成功)时,它会再次调用drFilter(),这将立即再次发出ajax调用,并且永远是这样。

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

url: @Url.Action("ptdrFilter") 

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

+0

谢谢,我会尝试使用此方法。它是一个测试代码,我创建了一个变量:// var sampleData = {Default:{value1:“text”,value2:“text”},PTDR:{value1:“cal”,value2:“cal”},All :{value1:“lool”,value2:“loool”}};以便根据第一个下拉列表的选择来确定它是否填充了第二个下拉列表。因为我不会使用samplesata变量如何将第二个下拉列表通用填充本身。对于ajax的新问题感到抱歉,并且仍然在学习它 – user5813072

+0

我无法真正回答关于它将如何专门填充其他下拉列表 - 您没有解释或显示足够的代码让我给出详细的答案。你问过我希望我解决的ajax问题。我还指出了另一个显而易见的问题,因为我可以看到它。如果答案可以帮助您解决ajax问题,请将其标记为已接受。如果您有第二个问题,请在SO上创建一个新问题:-) – ADyson