2010-07-01 66 views

回答

0

你也可以使用一個PageMethod的。這是您的網頁類中的一種公共靜態方法,具有[WebMethod]屬性。在你的ScriptManager中,你可以做EnablePageMethods="true",你可以直接從javascript調用你的頁面方法,它將繞過正常的asp.net頁面生命週期。

在隱藏文件的網頁類代碼:(對不起,不知道VB,所以C#是)

[WebMethod] 
public static void SaveValues(string[] vals) 
{ 
    // Save vals to database 
} 

您的ScriptManager:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> 

而在你的javascript:

function save() 
{ 
    var values = ["Value1", "Value2", "Value3"]; 
    var userContext = null; // You can use this for whatever you want, or leave it out 
    PageMethods.SaveValues(values, save_success, save_error, userContext); 
} 

save_successsave_error將是您的成功和錯誤回調。 userContext可以是任何你想要的。你也可以只定義成功回調在線,使用封閉:

function save() 
{ 
    var values = ["Value1", "Value2", "Value3"]; 
    var userContext = null; // You can use this for whatever you want, or leave it out 
    PageMethods.SaveValues(values, function(result) { 
     alert("Values have been saved"); 
    }, 
    function(err) { 
     alert("Error"); 
    }); 
} 

它也可以打電話給你的PageMethods直接使用jQuery: http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

序列化/反序列化的JavaScript和.NET類型之間給毀了你自動地(由.NET JavaScriptSerializer)。

PageMethods在聚光燈下沒有太多的愛,但它們非常有用。你不會瀏覽整個asp.net頁面生命週期(Page_Load,Page_LoadComplete等),這可以大大降低開銷(並且在使用諸如Page.RegisterStartupScript之類的東西時可以避免怪異的bug),但是你不必創建一個完整的Web服務或REST服務,通過客戶端代碼(javascript)進行簡單的調用。在我看來,遠勝於更新面板的混亂。但是,如果你發現你在各處都使用它們,那麼你的應用程序設計中可能不會正確地「分離你的顧慮」。單獨的服務層可能是按順序的。我真的很享受WCF服務,因爲我可以將RESTful和SOAP端點添加到單個服務中,並直接從客戶端代碼(使用REST端點)或在代碼隱藏文件中調用方法(通過添加使用SOAP端點服務參考)。

只是思考的食物。

1

您可以使用HiddenField(runat = server)來存儲該值f.e.作爲逗號分隔值(array.join())。 它的值存儲在ViewState中。

+0

我會盡力謝謝。 – TheGambler 2010-07-01 18:33:05

+0

順便說一下,你甚至不需要使用這種方法的Ajax;) – 2010-07-01 18:43:00

0

我用添描述的方法,但也可以使用jQuerythis Page的JSON庫,並使用此代碼解析數組:

var strArray = JSON.stringify(array); 
$("#<%=hidField.ClientID %>").val(strArray); 
1
Dim myJavaArray As Object, myValue As Variant, myArrayIdx As Long 
Set myJavaArray = SomeExistingJavaArrayObject 
' you can call .length like this because it is a property, not a method 
For myArrayIdx = 0 to myJavaArray.length step 1 
    myValue = CallByName(myJavaArray, CStr(myArrayIdx), VbGet) 
    ' do something with myValue here 
Next 
相關問題