通过AJAX将Javascript数组传递给方法后面的VB .Net代码?

时间:2010-07-01 18:10:36

标签: .net javascript

我想要做的就是通过AJAX调用或其他方式将JS数组传递给方法后面的VB .net代码?有人能指出我正确的方向吗?

我基本上想要将JS数组中的值保存到数据库中。

4 个答案:

答案 0 :(得分:1)

您可以使用HiddenField(runat = server)来存储该值f.e.以逗号分隔的值(array.join())。 其值存储在Viewstate中。

答案 1 :(得分: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

答案 2 :(得分:0)

我使用Tim描述的方法,但也使用jQuerythis Page中的Json库,并使用以下代码解析数组:

var strArray = JSON.stringify(array);
$("#<%=hidField.ClientID %>").val(strArray);

答案 3 :(得分: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");
    });
}

也可以使用jquery直接调用PageMethods: 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这样的东西时,你可以避免出现奇怪的错误),但你不必创建一个完整的Web服务或REST服务,可以直接从客户端代码(javascript)进行简单的调用。在我看来,远远超过了更新面板的混乱。

但是,如果您发现在整个地方使用它们,那么您可能无法在应用程序设计中正确地“分离您的顾虑”。单独的服务层可能是有序的。我真的很享受WCF服务,因为我可以将RESTful和SOAP端点添加到单个服务中,并直接从客户端代码(使用REST端点)或在代码隐藏文件中调用方法(通过添加使用SOAP端点)服务参考)。

只是值得深思。