2011-05-23 54 views

回答

1

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

+0

你能告诉我更多关于JSON(解释,例如)? – Badr 2011-05-23 06:01:25

+1

这是一个很好的参考点http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx – ysrb 2011-05-23 06:11:47

3

是的。一种方法可能是,使用网络方法;例如:

  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; 
    } 
} 

编辑:的javascript怎么会知道什么是服务器端的DataService ?

这需要在标记中引用Web服务。比如如下:

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

或者您可以使用回调/ page methods

+0

你错过了一些东西。 javascript如何知道服务器端的DataService是什么? – VikciaR 2011-05-23 06:19:27

+0

好问题,请参阅编辑。 – 2011-05-23 06:37:17

2

不一样。您可以将该对象序列化为一个字符串,将该字符串发送给ASP.NET,然后再将其转换为另一侧的对象。

JSON是一个很好的序列化格式,你可以将简单的对象直接到是围绕它(这是listed in the penultimate section of the JSON homepage)的各种库。

对于更复杂的对象,您需要先提取需要重新创建数据的相关位数据。

4

在ASP.NET的WebForms我会用一个ScriptService:

结帐这个样本: ASP.NET ScriptService deserialization problem with derived types

http://msdn.microsoft.com/en-us/magazine/cc163499.aspx

GenerateScriptType属性可以,如果你想通过/让孔对象服务使用

[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); 
    } 
} 
+0

您的示例显示如何调用Web服务并传递一个值,但它不显示如何传递对象(包括属性)。 – 2011-05-23 06:47:18

1

Ben Dotnet在asp.net WebForms中正确使用ScriptService。除了使用ScriptService装饰器GenerateScriptType装饰器对于确保包含您想要使用的复杂类型很重要。我发现Ben链接的文章除了这个之外还有用: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" /> 
相关问题