none
Modelos MVC en JQuery e Intellisense RRS feed

  • Pregunta

  • Hola.

    He estado trabajando en una plicacion MVC con Jquery, Ajax y JSON, para las vistas en MVC he creado clases en la carpeta Models y me he fijado que cada vez que quiero utilizar mi  modelo en un formulario utilizando Jquery me toca hacer esto(es un ejemplo):

    var Login = {
     username: $("#username").val(),
     password: $("#password").val()
            };
    
    $.ajax({
    
     url: encodeURI('@Url.Action("Validar","Login")'),
     dataType: "json",
     type: "POST",
     contentType: 'application/json; charset=utf-8',
     data: JSON.stringify(Login),
     processData: false,
     cache: false,
     
     success: function (data) {
       $("#resultadoDiv").html(data);
      },
     
     error: function (xhr) {
      alert('error');
       }
     });

    como pueden ver hago referencia a mi modelo llamado Login, solo tiene dos atributos publicos(username y password), es un simple ejemplo pero a lo que voy es que cada vez que hago referencia a un modelo(clase en mi carpeta Models) me toca saber exactamente cuales son los atributos de mi modelo, el Intellisense de Visual Studio no me ayuda, es decir, si utilizo la clase Login, quisiera poder escribir Login datos = New Login(); y luego poder acceder a cada propiedad de mi modelo ayudado por el Intellisense, osea poner datos y luego escribir el punto y que el intellisense me muestre las propiedades de mi clase.

    Yo se que por mas que hablemos de Jquery, Ajax...etc, al final es Javascript, asi que mi duda es: hay alguna manera de acceder a mis clases dentro de la carpeta modelos y que el intellisense me ayude con las propiedades de la clase tal como se hace en C#?


    pabletoreto

    jueves, 25 de junio de 2015 20:09

Respuestas

  • Me temo que estás mezcando el Modelo escrito en C# que usas en el lado servidor con un Modelo en javascript que quieres usar en el lado cliente.

    Aunque es corriente y usual que se use ajax para copiar el modelo del servidor al modelo cliente y viceversa, realmente son dos objetos separados escritos en lenguajes separados. Cada uno tiene su propio intellisense, pero no están conectados entre sí. Si escribes un constructor para Login en javascript y lo instancias con Javascript, verás como sí que el intellisense de javascript te ofrece los campos internos.

    Pero si construyes dinámicamente un objeto en javascript deserializando una cadena en JSON transmitida desde el servidor, no hay ninguna forma de que en tiempo de desarrollo se pueda determinar cuáles serán los datos que en tiempo de ejecución llegarán dentro de esa cadena, para que el intellisense pueda mostrarlos.

    • Marcado como respuesta pabletoreto viernes, 26 de junio de 2015 17:16
    viernes, 26 de junio de 2015 3:54

Todas las respuestas

  • hola

    partamos de la base que cuando haces esto

    $("#username").val(),

    no estas accediendo a tu modelo, sino que accedes al TextBox que representa en dato de tu modelo en el html de la pagina

    hasta donde se no hay intellisense que te ayude

    a veces los mas simple es enviar todo los datos usando la serializacion del form

    Submit form using AJAX and jQuery

    como veras usa

    $('form').serialize();

    y eso lo envia como data del $.ajax

    entonces el modelbinding de mvc mapeara cuando corresponda

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 25 de junio de 2015 22:10
  • Me temo que estás mezcando el Modelo escrito en C# que usas en el lado servidor con un Modelo en javascript que quieres usar en el lado cliente.

    Aunque es corriente y usual que se use ajax para copiar el modelo del servidor al modelo cliente y viceversa, realmente son dos objetos separados escritos en lenguajes separados. Cada uno tiene su propio intellisense, pero no están conectados entre sí. Si escribes un constructor para Login en javascript y lo instancias con Javascript, verás como sí que el intellisense de javascript te ofrece los campos internos.

    Pero si construyes dinámicamente un objeto en javascript deserializando una cadena en JSON transmitida desde el servidor, no hay ninguna forma de que en tiempo de desarrollo se pueda determinar cuáles serán los datos que en tiempo de ejecución llegarán dentro de esa cadena, para que el intellisense pueda mostrarlos.

    • Marcado como respuesta pabletoreto viernes, 26 de junio de 2015 17:16
    viernes, 26 de junio de 2015 3:54