none
jquery RRS feed

  • Pregunta

  • Hola tengo esta porción de código que quiero que se actualice cada x segundo , como debo hacerlo?

    <script  type="text/javascript">

        setInterval(function () {
            $("#leftColumn").load;
        }, 5000);

    </script>

    <div id="leftColumn">
        @Html.Raw(Html.Grid("Tickets")
        .setLoadText(Alerts.Areas.Controllers.BaseController.LoadText)
        .setPgText(Alerts.Areas.Controllers.BaseController.PgText).setRecordText(Alerts.Areas.Controllers.BaseController.RecordText)
        .addColumn(new Column("TicketStatus.TicketStatusId").setHidden(true))
        .addColumn(new Column("TicketStatus.Name").setLabel(" ").setAlign(Align.center).setCustomFormatter("status").setWidth(20))
        .addColumn(new Column("TicketID").setLabel("Id Ticket").setAlign(Align.center).setWidth(70))
        .addColumn(new Column("CreateDate").setLabel("Fecha").setAlign(Align.center).setWidth(90))
        .addColumn(new Column("Subcategory.Name").setLabel("Sub Categoría").setAlign(Align.center).setWidth(150))
        .setUrl(VirtualPathUtility.ToAbsolute("~/Home/GetData/"))
        .setRowNum(16)
        .onDblClickRow("GetTicketDetail (rowid, iRow, iCol, e, this);")
        .onCellSelect("SaveRowId(rowid, this)")
        .setAutoWidth(true)
        .setViewRecords(true)
        .setSearchOnEnter(false)
        .setSortName("CreateDate")
        .setSortOrder(SortOrder.desc)
        .setPager("pager")
        .onLoadComplete("SetSelectedRow(this)")
        )
        @Html.Hidden("SelectedId")
        <div class="clear">
        </div>
        <br />
        <br />
        <fieldset id="relatedTicketsLayout">
            <legend>A Relacionar</legend>
            <div id="relatedTickets">
            </div>
            <label for="ParentTicketId">
                ID:</label>
            <input id="ParentTicketId" type="text" style="width: 70px;" />
            <input type="button" value="RELACIONAR" class="bigButton typeButton notLastButton"
                onclick="javascript:RelatingTickets()" />
        </fieldset>
    </div>
    <div id="rightColumn">
        <div id="map_canvas">
        </div>
        <a id="expandCollapse" href="javascript:ExpandCollapseMap();">expandir/contraer</a>
    </div>
    <div class="clear">
    </div>

    martes, 30 de abril de 2013 12:08

Respuestas

  • Buenas:

    Es @Url.Action("Grilla","Home")

    Y todo eso lo colocas dentro del load. Si quieres para no liarte con tanta comilla hazlo en dos pasos:

    setInterval(function () {
       var uri = '@Url.Action("Grilla","Home")';
       $("#leftColumn").load(uri);
    }, 5000);

    Eso debería funcionarte. Si no, carga la pág en el navegador y haz un ver código fuente y debería aparecerte algo como:

    setInterval(function () {
       var uri = '/Home/Grilla';
       $("#leftColumn").load(uri);
    }, 5000);

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    • Marcado como respuesta coyon lunes, 6 de mayo de 2013 17:56
    lunes, 6 de mayo de 2013 7:57

Todas las respuestas

  • No vas a poder.

    No puedes desde javascript re-ejecutar un código razor.

    Lo que debes hacer es:

    • Sustituir el código razor y meterlo en una vista parcial
    • Desde javascript cada x segundos (con setInterval) hacer una llamada ajax e incrustar el contenido en el <div> (p. ej. usando $("#leftColumn").load(url)) donde "url" es la url de la acción que te devuelve la vista parcial.

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    martes, 30 de abril de 2013 12:38
  • Hola Eduard!!

    seria algo asi?

    <script  type="text/javascript">

        setInterval(function () {
            $("#leftColumn").load(@{Html.RenderPartial("UC/_Partialgrilla", Model);});
        }, 5000);

    </script>

    <div id="leftColumn">
        

        @{Html.RenderPartial("UC/_Partialgrilla", Model);} 
        
        <div class="clear">
        </div>
        <br />
        <br />
        <fieldset id="relatedTicketsLayout">
            <legend>A Relacionar</legend>
            <div id="relatedTickets">
            </div>
            <label for="ParentTicketId">
                ID:</label>
            <input id="ParentTicketId" type="text" style="width: 70px;" />
            <input type="button" value="RELACIONAR" class="bigButton typeButton notLastButton"
                onclick="javascript:RelatingTickets()" />
        </fieldset>
    </div>
    <div id="rightColumn">
        <div id="map_canvas">
        </div>
        <a id="expandCollapse" href="javascript:ExpandCollapseMap();">expandir/contraer</a>
    </div>

    martes, 30 de abril de 2013 13:25
  • Si, pero en lugar de usar Html.RenderAction, usas @Url.Action:

    $("#leftColumn").load("@Url.Action("Accion", "Controlador")");

    Donde la acción del controlador devuelve un ActionResult que sea la vista parcial (return PartialView()).

    NO puedes usar @Html.RenderPartial porque eso se resuelve mientras se está resolviendo la vista principal, y tu lo que quieres es realizar una llamada ajax, una vez se ha resuelto (y mandado al browser) la vista principal.

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    martes, 30 de abril de 2013 20:05
  • Hola Eduard disculpame soy muy nuevo en esto, no comprendo muy bien.

    la funcion javascript , que debo cambiar? como debo hacerlo , gracias

    en el index.cshtml  tengo el div de donde llamar la vista parcial y la funcion:

    <div id="leftColumn">
     
    </div>

    <script  type="text/javascript">

        setInterval(function () {
            $("#leftColumn").load;
        }, 5000);

    </script>

    porque yo cree en el HomeController :

    public virtual ActionResult Grilla() 
            {
                return PartialView();
            }

    la vista parcial en view-home-UC- grilla.cshtml, tengo esto:

    @model Alerts.Entities.Entities.Ticket
    @using Alerts.Entities
    @using Alerts.Areas.Helpers

     <div>
     @Html.Raw(Html.Grid("Tickets")
        .setLoadText(Alerts.Areas.Controllers.BaseController.LoadText)
        .setPgText(Alerts.Areas.Controllers.BaseController.PgText).setRecordText(Alerts.Areas.Controllers.BaseController.RecordText)
        .addColumn(new Column("TicketStatus.TicketStatusId").setHidden(true))
        .addColumn(new Column("TicketStatus.Name").setLabel(" ").setAlign(Align.center).setCustomFormatter("status").setWidth(20))
        .addColumn(new Column("TicketID").setLabel("Id Ticket").setAlign(Align.center).setWidth(70))
        .addColumn(new Column("CreateDate").setLabel("Fecha").setAlign(Align.center).setWidth(90))
        .addColumn(new Column("Subcategory.Name").setLabel("Sub Categoría").setAlign(Align.center).setWidth(150))
        .setUrl(VirtualPathUtility.ToAbsolute("~/Home/GetData/"))
        .setRowNum(16)
        .onDblClickRow("GetTicketDetail (rowid, iRow, iCol, e, this);")
        .onCellSelect("SaveRowId(rowid, this)")
        .setAutoWidth(true)
        .setViewRecords(true)
        .setSearchOnEnter(false)
        .setSortName("CreateDate")
        .setSortOrder(SortOrder.desc)
        .setPager("pager")
        .onLoadComplete("SetSelectedRow(this)")
        )
        @Html.Hidden("SelectedId")
        
           <div class="clear">
            </div>
            <br />
            <br />
            <fieldset id="relatedTicketsLayout">
                <legend>A Relacionar</legend>
                <div id="relatedTickets">
                </div>
                <label for="ParentTicketId">
                    ID:</label>
                <input id="ParentTicketId" type="text" style="width: 70px;" />
                <input type="button" value="RELACIONAR" class="bigButton typeButton notLastButton"
                    onclick="javascript:RelatingTickets()" />
            </fieldset>
      
      </div>

    jueves, 2 de mayo de 2013 20:07
  • Te falta el parámetro en el .load() que es la URL de la acción del controlador que devuelve la vista parcial.

    En tu caso:

        setInterval(function () {
            $("#leftColumn").load("@Url.Action("Grilla","Home")");
        }, 5000);

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    viernes, 3 de mayo de 2013 11:16
  • Gracias Eduard , sigo los pasos que me indicas pero, no logra mostrar la grilla que esta en la vista partial, le puso a modo de prueba un alert para ver si entra a la funcion, y si lo hace, el problema tiene que estar que no me reconoce la url, porq que si le coloco en el div del index el @{Html.RenderPartial("UC/Grilla", Model);} lo levanta , pero claro no lo refresca cada x segundo. sinceramente no se como seguirlo.tienes alguna idea?

    muy agradecido por la ayuda que me has dado hasta el momento.

    por lo que veo me esta marcando  en grilla en verde en  @Url.Action("Grilla","Home")"); y sale la leyenda  expected ',' or ')'
    • Editado coyon viernes, 3 de mayo de 2013 20:37
    viernes, 3 de mayo de 2013 20:25
  • Buenas:

    Es @Url.Action("Grilla","Home")

    Y todo eso lo colocas dentro del load. Si quieres para no liarte con tanta comilla hazlo en dos pasos:

    setInterval(function () {
       var uri = '@Url.Action("Grilla","Home")';
       $("#leftColumn").load(uri);
    }, 5000);

    Eso debería funcionarte. Si no, carga la pág en el navegador y haz un ver código fuente y debería aparecerte algo como:

    setInterval(function () {
       var uri = '/Home/Grilla';
       $("#leftColumn").load(uri);
    }, 5000);

    Saludos!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    • Marcado como respuesta coyon lunes, 6 de mayo de 2013 17:56
    lunes, 6 de mayo de 2013 7:57
  • todo lo que me fuiste diciendo estaba bien, lo que hice fue borrar la vista y creala nuevamente y anduvo perfecto, muchas gracias, muy  agradecido.

    saludos

     

    lunes, 6 de mayo de 2013 18:38