2009-08-26 227 views
6

我有一个很好的页面,可以完成我需要的一切。然而,其中一个元素(部分页面)需要几秒钟的时间,然后我想加载。所以我想要做的就是先显示没有这个部分的页面,但是显示一个“加载”gif的地方。然后在我的jQuery ...使用jQuery调用控制器动作

$(document).ready(function() { 

    // Call controller/action (i.e. Client/GetStuff) 

}); 

我想调用返回PartialView并更新我的DIV内容我的控制器操作。它基本上在加载时异步调用部分加载。我可以用ActionLink做到这一点,直到它达到我想要做的事情为止。如果我使用jQuery进行onloand类型的调用,我甚至可以返回PartialView吗?

回答

10

只需使用$.load

$(document).ready(function() {  
    $('#myDiv').html('<img src="loading.gif"/>') 
       .load('Client/GetStuff'); 
}); 

,将与您的负载指示更换DIV ID =“myDiv”的内容,然后注入客户端/ GetStuff的输出到它。

+0

所以我实现了这一点: $( '#refreshGrid')负载( '?/客户/ GetAttachments ID =' + clientID的); 我的客户控制器看起来是这样的: 公众的ActionResult GetAttachments(INT ID){ // 一些逻辑... 回报PartialView( “〜/查看/客户/ ClientAttachmentGridView.ascx”,文件); } alert($('#refreshGrid'))给了我一个对象,alert(clientID)给了我期望的东西。控制器没有被击中(否则我会看到一些来自提琴手的Web服务调用)。令人讨厌的是我没有看到任何错误消息。 – RailRhoad 2009-08-26 20:07:57

+0

哦,我收回它。我得到一个500小提琴手: 参数字典中包含一个空条目,用于参数'id'不可为空的类型'System.Int32'方法'System.Web.Mvc.ActionResult GetAttachments(Int32)''CommercialLendingPlatform .Controllers.ClientController”。为了使参数可选,其类型应该是引用类型或Nullable类型。
参数名称:参数 – RailRhoad 2009-08-26 20:10:32

+0

奇妙!我需要做一个Client/GetAttachments/clientID!忘记一秒钟的网址路由。感谢大家! – RailRhoad 2009-08-26 20:13:07

3

我相信你可以。我以前使用jQuery从ASP.NET MVC控制器中获取JSON,这是我发现的将数据传递给客户端的最令人愉快的方式之一。

我敢肯定,得到一个局部视图,可能是因为使用jQuery '负荷' 一样简单, '让' 或 '邮报' 的方法:

使用Load

$("#feeds").load("test.aspx"); 

使用Get

$.get("test.aspx", function(data){ 
    alert("Data Loaded: " + data); 
}); 

使用Post

$.post("test.aspx", function(data){ 
    alert("Data Loaded: " + data); 
}); 
1
$.ajax("MyController/MyAction", function(data) { 
    alert(data); 
}); 

这是一个非常基本的例子;您只需使用AJAX调用控制器,然后就可以将数据弹出到DOM中,或者使用它进行其他操作。

0

我们可以很容易地如下调用使用Javascript/Jquery的控制器方法:

假设以下是被称为返回一些类对象的数组控制器方法。让类是“A”

public JsonResult SubMenu_Click(string param1, string param2) 

    { 
     A[] arr = null; 
     try 
     { 
      Processing... 
      Get Result and fill arr. 

     } 
     catch { } 


     return Json(arr , JsonRequestBehavior.AllowGet); 

    } 

以下是复杂的类型(类)

public class A 
{ 

    public string property1 {get ; set ;} 

    public string property2 {get ; set ;} 

} 

现在轮到以上由JQUERY控制器的方法调用。以下是调用控制器方法的Jquery函数。

function callControllerMethod(value1 , value2) { 
    var strMethodUrl = '@Url.Action("SubMenu_Click", "Home")?param1=value1 &param2=value2' 
    $.getJSON(strMethodUrl, receieveResponse); 
} 


function receieveResponse(response) { 

    if (response != null) { 
     for (var i = 0; i < response.length; i++) { 
      alert(response[i].property1); 
     } 
    } 
} 

在上面的jQuery函数“callControllerMethod”我们开发的控制器方法的网址,并把在一个名为“strMehodUrl”变量并调用API的Jquery的方法的getJSON。

receieveResponse是接收控制器方法的响应或返回值的回调函数。

在这里,我们提出使用JSON的,因为我们不能使用C#的类对象

直接进入javascript函数的,因此,我们所转换的结果(ARR)在控制器的方法为JSON对象如下:

Json(arr,JsonRequestBehavior.AllowGet);

并返回该Json对象。

现在在Javascript/JQuery的回调函数中,我们可以利用这个结果的JSON对象并相应地工作以在UI上显示响应数据。

更多detaill click here