Tengo una vista en la que quiero establecer el valor de afeitar variable de jQuery.
Estoy intentando así

@{
    ViewBag.Title = "Products";
    Layout = "~/Views/Shared/_Layout.cshtml";
    string ip_address = "";
}

<script type="text/javascript">
    $(function () {
        $.get("http://ipinfo.io", function (response) {
            console.log("ip+" + response.ip);
            '@ip_address' = response.ip;

        }, "jsonp");
    });
</script>

Pero esto es tirar un error Uncaught ReferenceError: Invalid left-hand side in assignment

  • Eso no es la idea de la maquinilla de afeitar, maquinilla de afeitar hace que la interfaz de usuario de salida. Javascript manipula la interfaz de usuario y, a continuación, la página se envía la información de vuelta al servidor. Le sugiero que lea más en asp.net
  • Maquinilla de afeitar es de código del lado del servidor. string ip_address ya no existe, una vez que sus enviados al navegador por lo que no puede establecerse utilizando javascript que se ejecuta en el cliente.
  • No es posible, maquinilla de Afeitar ejecutar en el lado del servidor, y jquery ejecutar en el lado del cliente.
InformationsquelleAutor Manoj | 2014-09-06

2 Comentarios

  1. 4

    Lo que quiero hacer es técnicamente imposible – como ha sido ya señalado por los comentarios y la otra respuesta.

    Para resumir por qué esto no funciona, maquinilla de Afeitar es un el motor de la vista que utiliza C# código que se ejecuta en el servidor en el momento de la página solicitud con el fin de construir un HTML respuesta el cual es enviado a la cliente.

    El cliente no tiene ninguna referencia a la maquinilla de Afeitar de las variables, y el motor de vistas Razor no tiene acceso a las variables JavaScript, aunque bien podría salida de JavaScript dentro de un bloque de secuencia de comandos que establece el valor inicial de la variable sobre la carga de la página.

    Incluso si JavaScript tiene acceso a la maquinilla de Afeitar de variables, sólo se ejecuta cuando la página ha sido entregado al agente de usuario en el dispositivo cliente (navegador en los diletantes términos), y es demasiado tarde para hacer cualquier representación condicional, mostrar/ocultar de datos o de comprobación de seguridad en este punto, o el uso de la variable dentro de la vista.

    Si usted sólo desea que la dirección IP del cliente, a continuación, usted ya tiene acceso a este en el controlador a través de la UserHostAddress propery del objeto de la Petición. Dependiendo de lo que usted quiere hacer, usted podría pasar esto a través de la ViewBag desde el controlador a la vista y render (‘Su dirección IP es…’), o si usted lo está utilizando para fines de seguridad de uso en el controlador de filtro de la acción devuelven a la vista, o para determinar si la vista se debe representar para el usuario (negocio/dominio de la lógica en general, no debería llevarse a cabo dentro de la propia vista).

    Esto también significa que usted no es dependiente de un servicio de terceros – el servidor web ha saber la dirección IP del usuario que solicita la página tal y como se lo utiliza para enviar la respuesta a su navegador.

    Si quieres que el resto de datos que sólo pueden ser determinados desde el navegador, por ejemplo, el tamaño de la «ventanilla» (la ventana del navegador) que la página está representada en su mejor apuesta es usar una petición Ajax para enviar esto a un controlador de acción como en No1_Melman la respuesta.

  2. 1

    Creo que solo se entiende lo que usted está tratando de hacer.

    Siento que el no sabe lo suficiente acerca de ASP.NET sin embargo, para lograr lo que quieres hacer. Así que recomiendo ir a través de más tutoriales sobre codeproject y asp.net de manera que usted pueda comprender plenamente el marco de MVC y cómo utilizarlo.

    RESPUESTA ORIGINAL

    Usted puede publicar esa información directamente del servidor si desea:

    $(function () {
        $.get("http://ipinfo.io", function (response) {
            $.post("/MyController/Action", response);
        }, "jsonp");
    }) 

    De afeitar es sólo para la representación de la salida. Así que una vez que la vista de la página en el navegador tendrá CERO lazos de afeitar, es decir, no hay interacción con él.

    Mi código no carga parcial, sin embargo, usted puede utilizar JavaScript para representar la interfaz de usuario una vez que haya cargado la página inicial (el de disparar al llegar a ipinfo). Mi código de uso de jQuery para publicar la IP de la respuesta a una acción en MVC, por lo que cuando la mina dice /MyController/Action, debe reemplazar con /Home/_ProductList. Por la forma en que realmente no se debe prefijo de una Acción con «_»

    Así que a partir de lo que usted está diciendo que quiere a carga parcial, no es una acción, los comentarios que me confunde debido a que el código que escribimos. Esto es lo que yo haría:

    @{
        ViewBag.Title = "Products";
        Layout = "~/Views/Shared/_Layout.cshtml";
        string ip_address = "";
    }
    
    @Html.Partial("_ProductList");
    
    <script type="text/javascript">
        $(function () {
            $.get("http://ipinfo.io", function (response) {
                $.post("/MyController/Action", response.ip, function (successObj) {
                     //In here is where I set what ever in the partial
    
                     //I'm guessing that in the partial it renders some product table to view the products?
                     $.each(successObj, function (product) {
    
                        $("productTable").append(/* some new row using the product variable */);
                     });
                 });            
                   console.log("ip+" + response.ip);
            }, "jsonp");
        });
    </script>
    • Quiero usar este ip_address para llamar a vista parcial como este @Html.Action("_ProductList", "Home", new { ip = ip_address })
    • Que es lo que mi código no. Mi código de uso de jQuery para publicar una acción en MVC, por lo que cuando la mina dice «/MyController/Acción», que se reemplaza con «/Home/_ProductList». Por la forma en que realmente no se debe prefijo de una Acción con «_»
    • Utilizamos «_» sólo para vistas parciales.
    • Ahh, ver me confundí porque el código dice «Acción», no «Parcial». En resumen, usted no puede hacer lo que quiere hacer de esa manera. La forma en que puedo lograr lo que tienes que hacer es mostrar el parcial en la vista principal, entonces me puse con jQuery o real Knockout

Dejar respuesta

Please enter your comment!
Please enter your name here