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

问题描述

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

解决方法

在ASP.NET WebForms中,我将使用ScriptService: 检阅此样本:http://msdn.microsoft.com/zh-cn/magazine/cc163499.aspx 如果要向服务传递/获取孔对象,可以使用ѭ0属性: 派生类型的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);
    }
}
    ,是。一种方法是使用网络方法。例如: 创建服务 从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;
    }
}
编辑:javascript将如何知道什么是服务器端DataService? 这将需要在标记中引用Web服务。例如如下:
<asp:ScriptManager ID=\"sm\" runat=\"server\">
            <Services>
            <asp:ServiceReference Path=\"DataService.asmx\" />
        </Services>
</asp:ScriptManager>
或者,您可以使用回调/页面方法。     ,不是这样的。您可以将对象序列化为字符串,将该字符串发送到ASP.NET,然后在另一侧再次将其转换为对象。 JSON是一种很好的序列化格式,您可以将简单的对象直接放入周围的各种库中(并在JSON主页的倒数第二部分中列出)。 对于更复杂的对象,在执行此操作之前,您需要提取需要重新创建它们的相关数据位。     ,是。您可以使用Json并执行POST。如果使用的是jQuery,则可以使用$ .ajax将值发布到服务器端。希望这可以帮助。     ,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\" />