我可以通过ASP.NET将对象从客户端javascript发送到服务器端代码吗

Can I send an object from client-side javascript to server-side code via ASP.NET?

本文关键字:服务器端 代码 javascript 客户端 ASP 可以通过 NET 对象      更新时间:2023-09-26

我可以通过ASP.NET将对象从客户端javascript发送到服务器端代码吗?

在ASP.NET WebForms中,我将使用ScriptService:

签出此示例:http://msdn.microsoft.com/en-us/magazine/cc163499.aspx

如果要将孔对象传递/获取到服务,则可以使用GenerateScriptType属性:派生类型的ASP.NET ScriptService反序列化问题

[WebService(Namespace = "http://msdnmagazine.com/ws")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[GenerateScriptType(typeof(Object1))]
[GenerateScriptType(typeof(Object2))]
[ScriptService]
public class StockQuoteService : WebService
{
    static Random _rand = new Random(Environment.TickCount);
    [WebMethod]
    public int GetStockQuote(string symbol)
    {
        return _rand.Next(0, 120);
    }
}

是。一种方法可以是,使用web方法;例如:

  1. 创建服务
  2. 从JavaScript方法调用,如:DataService.Push(yourObject)

例如:

Javascript方法:

function btnGenerate_onclick(result) {
    DataService.Push(getDataFromSomeDiv(), onGenerateReportComplete /*callback method*/);
    //or
    //DataService.Push(document.getElementById("myDiv").innerHTML, onGenerateReportComplete /*callback method*/);
}
function onGenerateReportComplete(result) {
            alert("Success:" + result);
}

服务方式:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class DataService : System.Web.Services.WebService
{
    [WebMethod(EnableSession = true)] //If you want?
    public bool Push(object someObject)
    {
        //var v = someObject as MyObjectClass;//Process object 
        return true;
    }
}

EDIT:javascript怎么知道什么是服务器端DataService

这将需要在标记中引用web服务。例如:

<asp:ScriptManager ID="sm" runat="server">
            <Services>
            <asp:ServiceReference Path="DataService.asmx" />
        </Services>
</asp:ScriptManager>

或者您可以使用回调/页面方法。

并非如此。您可以将对象序列化为字符串,将该字符串发送到ASP.NET,然后在另一端将其再次转换为对象。

JSON是一种很好的序列化格式,您可以将简单的对象直接放入各种库中(这些库列在JSON主页的倒数第二部分)。

对于更复杂的对象,在执行此操作之前,您需要提取重新创建它们所需的相关数据位。

Ben Dotnet在asp.net WebForms中使用ScriptService是正确的。除了使用ScriptService装饰器外,GenerateScriptType饰器对于确保包含要使用的复杂类型也很重要。我发现本链接的文章除了这篇文章之外还很有用:http://www.webreference.com/programming/asp-net-ajax/complex-data-types/index.html

以下是我如何做到你所尝试的。首先,我定义了要在代码隐藏文件中使用的自定义类型。

namespace TestProject
{
    public class SampleData
        {
            public int id { get; set; }
            public string StartDate { get; set; }
            public string EndDate { get; set; }
            public SampleData()
            { }
    }
    public partial class SamplePage : System.Web.UI.Page
    {
        /* The rest of the SamplePage.aspx.cs file goes here */
    }
}

然后我在SamplePage代码后面创建了一个WebMethod/ScriptMethod,如下所示:

[WebMethod]
[ScriptMethod]
[GenerateScriptType(typeof(SampleData))]
public static bool EditReminder(SampleData data)
{
    /* Server side code goes here */
    return true;
}

然后,在客户端页面上,我能够创建一个SampleData类型的对象,并使用这样的PageMethods传递它不要忘记包含名称空间,这是必要的

function some_javascript_function () {
    var sample_data = new TestProject.SampleData()
    sample_data.id = 1;
    sample_data.StartDate = '6/24/1976';
    sample_data.EndDate = '3/20/2012';
    PageMethods.EditReminder(sample_data, OnEditReminderComplete)
}
function OnEditReminderComplete () {
    if (result) alert("Success!");
    else alert("Failure!");
}

另外,不要忘记在页面上的某个地方包含脚本管理器并启用类似这样的页面方法:

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

是。您可以使用Json并执行POST。如果您使用的是jQuery,您可以使用$.ajax将值发布到服务器端。希望这能有所帮助。