¿Puedo enviar un objeto desde javascript del lado del cliente al código del lado del servidor a través de ASP.NET?¿Puedo enviar un objeto desde javascript del lado del cliente al código del lado del servidor a través de ASP.NET?
Respuesta
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.
Sí. Una forma podría ser usar un método web; por ejemplo:
- crear un servicio
- 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.
Has perdido algo. ¿Cómo sagaría javascript qué es DataService del lado del servidor? – VikciaR
Buena pregunta, ver edición. –
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.
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);
}
}
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). –
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" />
- 1. Método del lado del servidor y del lado del cliente
- 2. Evento del servidor ASP.net manejado desde el lado del cliente
- 3. Web Charting, lado del servidor o del lado del cliente?
- 4. Ruby: del lado del cliente o del lado del servidor?
- 5. Paginación: ¿lado del servidor o lado del cliente?
- 6. ¿Qué tan rápido es javascript del lado del cliente contra Java del lado del servidor?
- 7. ASP.NET Validación lado del servidor
- 8. lado del servidor MVC + lado del cliente MVC
- 9. ¿Cómo desencadenar un evento del lado del servidor desde javascript?
- 10. librería javascript para el almacenamiento del lado del cliente con la sincronización del lado del servidor
- 11. Idiomas del lado del cliente
- 12. Acceso a la variable del lado del servidor en el lado del cliente y viceversa Asp.Net y javascript
- 13. Rendering HTML + Javascript del lado del servidor
- 14. Comprobación del lado del servidor frente al lado del agente
- 15. Validación del lado del cliente ASP.NET MVC
- 16. ASP.NET validador propio lado del cliente y la validación del lado del servidor no disparar
- 17. Node.js protección del código del lado del servidor
- 18. Plantillas del lado del servidor, plantillas del lado del cliente - ¿Conversión automática?
- 19. Método no estático en el lado del servidor desde el lado del cliente usando JavsScript
- 20. Crear validación combinada del lado del cliente y del lado del servidor en Symfony2
- 21. jqgrid clasificación del lado del cliente con paginación del lado del servidor - los datos desaparecen
- 22. Sesiones del lado del cliente
- 23. Utilice menos (preprocesador css) del lado del servidor o del lado del cliente
- 24. ¿Debo hacer solicitudes de API del lado del servidor o del lado del cliente?
- 25. Validación de entrada de usuario, del lado del cliente o del lado del servidor? [PHP/JS]
- 26. Llamar a un método del lado del servidor ASP.NET a través de jQuery
- 27. Cómo llamar a código detrás método de servidor desde un lado del cliente JavaScript función?
- 28. ¿Del lado del servidor o del lado del cliente para buscar tweets?
- 29. ASP.NET equivalente del lado del servidor incluye
- 30. ASP.NET Intellisense frente a los atributos del lado del cliente
¿Me podría decir más sobre JSON (explicar, ejemplo)? – Badr
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