2011-05-23 29 views

Respuesta

1

Sí. Puede usar Json y hacer POST. Si está utilizando jQuery, puede usar $ .ajax para publicar los valores en el servidor. Espero que esto ayude.

+0

¿Me podría decir más sobre JSON (explicar, ejemplo)? – Badr

+1

Este es un buen punto de referencia http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx – ysrb

3

Sí. Una forma podría ser usar un método web; por ejemplo:

  1. crear un servicio
  2. llamada desde el método JavaScript como: DataService.Push(yourObject);

Por ejemplo:

métodos 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); 
} 

métodos de servicio:

[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: ¿Cómo Javascript a saber lo que es DataService del lado del servidor ?

Esto requerirá la referencia del servicio web en el marcado. Por ejemplo, como siguiente:

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

O puede utilizar devoluciones de llamada/page methods.

+0

Has perdido algo. ¿Cómo sagaría javascript qué es DataService del lado del servidor? – VikciaR

+0

Buena pregunta, ver edición. –

2

No como tal. Puede serializar el objeto en una cadena, enviar esa cadena a ASP.NET y luego convertirla en un objeto nuevamente en el otro lado.

JSON es un buen formato de serialización para esto, y puede colocar objetos simples directamente en las diversas bibliotecas que están a su alrededor (y que son listed in the penultimate section of the JSON homepage).

Para objetos más complejos, necesitará extraer los bits relavent de datos que necesita para recrearlos antes de hacerlo.

4

en ASP.NET Web Forms, lo usaría un ScriptService:

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

El atributo GenerateScriptType puede utilizar si quiere pase/obtener objetos de mano para el servicio: ASP.NET ScriptService deserialization problem with derived types

[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

Su muestra muestra cómo llamar a un servicio web y pasar un valor único, sin embargo, no muestra cómo pasar un objeto (incluidas las propiedades). –

1

Ben Dotnet tiene razón sobre el uso de ScriptService en asp.net WebForms. Además de utilizar el decorador ScriptService, el decorador GenerateScriptType es importante para asegurarse de que se incluye el tipo complejo que desea utilizar. Encontré los artículos vinculados a Ben para que sean útiles además de este: http://www.webreference.com/programming/asp-net-ajax/complex-data-types/index.html

Así es como pude hacer exactamente lo que está intentando. Primero definí el tipo personalizado que quería usar en mi código detrás del archivo.

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 */ 
    } 
} 

Entonces creó un WebMethod/ScriptMethod en mi código SamplePage detrás de la siguiente manera:

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

A continuación, en la página del lado del cliente que era capaz de crear un objeto de tipo SampleData y pase que utilizando los PageMethods de esta manera. No olvide incluir el espacio de nombre, esto es necesario.

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!"); 
} 

Además, no se olvide de incluir el gestor de secuencia de comandos y permitir métodos de página como esta en algún lugar de su página:

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