2010-07-01 85 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