Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过AJAX将Javascript数组传递给VB.Net代码隐藏方法?_.net_Javascript - Fatal编程技术网

通过AJAX将Javascript数组传递给VB.Net代码隐藏方法?

通过AJAX将Javascript数组传递给VB.Net代码隐藏方法?,.net,javascript,.net,Javascript,我想做的就是通过AJAX调用或其他方式(如果有其他方式)将JS数组传递给VB.net代码隐藏方法?有人能给我指出正确的方向吗 我基本上希望将JS数组中的值保存到数据库中。您可以使用(runat=server)将该值存储为逗号分隔的值()。 它的值存储在Viewstate中。我使用Tim描述的方法,但也使用和Json库,并使用以下代码解析数组: var strArray = JSON.stringify(array); $("#<%=hidField.ClientID %>").val

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

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

您可以使用(runat=server)将该值存储为逗号分隔的值()。
它的值存储在Viewstate中。

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

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

您也可以使用PageMethod。它是页面类中的公共静态方法,具有
[WebMethod]
属性。在ScriptManager中,您可以执行
EnablePageMethods=“true”
,您可以直接从javascript调用页面方法,它将绕过正常的asp.net页面生命周期

在您的页面类代码隐藏文件中:(对不起,不知道VB,所以是C)

您的脚本管理器:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
save_success
save_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:

javascript和.NET类型之间的序列化/反序列化由.NET JavaScriptSerializer自动完成

PageMethods在聚光灯下不太受欢迎,但它们非常有用。您不必经历整个asp.net页面生命周期(page_Load、page_LoadComplete等),这大大减少了开销(并在使用page.RegisterStartupScript等工具时避免了奇怪的错误),但您不必创建完整的web服务或REST服务来直接从客户端代码(javascript)进行简单调用。在我看来,这比混乱的更新面板要好得多

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


值得思考。

顺便说一句,这种方法甚至不需要Ajax;)
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
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");
    });
}
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