MVC4:从视图中调用控制器的Ajax是否可以将部分视图作为html和Json格式数据返回?

时间:2014-10-11 18:50:53

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

MVC4:是否可以通过一个Ajax调用来自razor视图上的脚本的控制器操作来获取部分视图作为html和Json格式数据? 现在我有两个函数可以使两次访问控制器到两个diff操作,每个操作调用相同的存储过程来从db获取数据。我想将它合并为一个电话。

查看脚本部分:

function getPartialViewHtml(){      
   var val1=1;

   $.ajax({
       type:"POST",
       url: 'Home/GetPartialViewHtml',
       data: { parm1 : val1 },
       success:  function(htmlResult){
          $('#divShowPartial').html(data);
          getJsonResult(val1);
       }
   });
}

function getJsonResult(val1)
{
   $.ajax({
       type:"POST",
       url: 'Home/GetJsonResult',
       data: { parm1 : val1 },
       success:  function(jsonResult){
          $('#txtShowJsonData1').val(data.text1);  
          $('#txtShowJsonData2').val(data.text2);            
       }
   });
}

CONTROLLER

public PartialViewResult GetPartialViewHtml(int parm1)
{
   PartialViewModel model = new PartialViewModel(parm1);  // calls MyOtherModel model= new MyOtherModel (parm1); 
   return PartialView("MyPartialView", model);
}

public ActionResult GetJsonResult(intparm1)
{
   MyOtherModel model= new MyOtherModel (parm1); 
   return Json(model);  
}

模型

class PartialViewModel 
{
   public MyModel mm {get; set;}

   public string otherData {get; set;}
   ........
}

class MyModel
{
   public int id {get; set;}
   public string text1 {get; set;}
   public string text2 {get; set;}
}

1 个答案:

答案 0 :(得分:0)

我不这么认为,这是你回归类型的本质。

注意:PartialViewResultActionResult。您可以为JsonResult切换ActionResult,因为这在您的代码中更有意义。

你可以触发两个同步的AJAX调用而不是链接它们的回调。

function getPartialViewHtml() {      
   var val1 = 1;
   $.ajax({
       type:"POST",
       url: 'Home/GetPartialViewHtml',
       data: { parm1 : val1 },
       async: false,
       success:  function(htmlResult){
          $('#divShowPartial').html(data);
       }
   });
   $.ajax({
       type:"POST",
       url: 'Home/GetJsonResult',
       data: { parm1 : val1 },
       async: false,
       success:  function(jsonResult){
          $('#txtShowJsonData1').val(data.text1);  
          $('#txtShowJsonData2').val(data.text2);            
       }
   });
}

这样可以避免宣布两个单独的函数。

相关问题