Yo estoy tratando de hacer que devuelve la solicitud en el ajax actualizado vista parcial. Al parecer, la petición no se devuelve desde el ajax-función.
Aquí ajax-código:

<script type="text/javascript">
function doAjaxPost(myid) {
    //get the form values
    var ApplSort = $('#DropDownListSort').val();
    var radio_check_val=0;

    for (i = 0; i < document.getElementsByName('radio').length; i++) {
        if (document.getElementsByName('radio')[i].checked) {
            radio_check_val = document.getElementsByName('radio')[i].value;
        }
    }

    //alert("myid=" + myid +";"+ "ApplSort=" + ApplSort + ";" + "radio_check_val=" + radio_check_val);

    $.ajax(
 {
     type: 'POST',
     contentType: 'application/json; charset=utf-8',
     data: { ApplSort: ApplSort, radio_check_val: radio_check_val, myid: myid },
     UpdateTargetId: "tabledata",
     dataType: 'html',
     url: 'Partner/PartnerApplications',
     success: function (data) { 
      var result = data;
      $('tabledata').html(result);
},

     error: function (error) {
         alert('Ошибка AJAX-запроса. Обновите страницу!');
     }
 });
}
</script>

Falla de la llama y la página está completamente actualizado.

Aquí se actualiza el contenido de la vista:

<div id="target">
@Html.Partial("~/Views/Partner/PartnerApplicationsPartial.cshtml")
</div>

código del controlador:

[HttpPost]
    public ActionResult PartnerApplications(int[] ApplSort, int[] radio_check_val, int[] myid)
    {
        MordaPartner MrdPrt = new MordaPartner(Server, Request);

        if (Request.IsAjaxRequest())
        {
            var obj = MrdPrt.morda_obj.CookieAuthenticationPartner(Server, Request, Response, MrdPrt.PartnerLogin, MrdPrt.PartnerPassword);
            if (obj != null)
            {
                //alert("ApplSort=" + ApplSort + ";" + "ApplSelectOffer=" + ApplSelectOffer + ";" + "ApplSelectAuction=" + ApplSelectAuction + ";" + "ApplSelectNoOffer=" + ApplSelectNoOffer);

                var objs = from s in MrdPrt.morda_obj.entities.applications where s.application_user_city == obj.partner_city & s.application_blocked != 1 orderby s.application_id ascending select s;

                return Json(new { data = this.RenderPartialViewToString("PartnerApplicationsPartial", objs) });
            }
            else
            {
                return RedirectToAction("Registration");

            }
        }
        else { return RedirectToAction("PartnerApplications"); }
    }

RenderPartialViewToString fue tomada de aquí: http://www.c-sharpcorner.com/blogs/7150/implementing-renderpartialviewtostring-in-asp-net-mvc-3.aspx

script se carga:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

¿Qué estoy haciendo mal?

  • Pregunta: en la misma función PartnerApplications volver JSON o HTML, pero el código JavaScript maneja solo HTML. Es lo que se pretende hacer?
  • Sí, de hecho … Y ¿cómo puedo devolver sólo el HTML?
  • Por CIERTO, si es una petición Ajax, no se puede redirigir peticiones ajax. Usted necesita para volver JSON para dejar tu Javascript redirigir al usuario.
InformationsquelleAutor Kot Fantazer | 2012-10-08

2 Comentarios

  1. 1

    Creo que su más fácil solución, ya que son sólo ganas de hacer un parcial…

    @using( Ajax.BeginForm( "PartnerApplications", 
                            null, 
                            new AjaxOptions() { 
                                 HttpMethod = "POST", 
                                 InsertionMode = InsertionMode.Replace,  
                                 UpdateTargetId = "target", 
                                 LoadingElementId = "AjaxSearch" }, 
                            new { id = "UserSearchForm" } ) ) {
        <input type="text" id="id" name="id" placeholder="Enter Search" />
    }

    Esta es una habilidad que se construye en MVC que hace MUY fácil de actualizar un elemento con los resultados de un parcial.

    Todo esto que está diciendo es que usted quiere un nuevo Formulario Ajax que llama a la PartnerApplications Acción. Desea que la acción se llama con un HttpMethod que es un POST solicitud y desea que los resultados de reemplazar (InsertionMode.Replace) los elementos existentes en la target (cualquiera que sea) y mientras la solicitud está teniendo lugar desea que el elemento AjaxSearch visible (esto es opcional, pero algo que yo uso para mostrar que se está trabajando).

    Que esto va a generar el JavaScript necesario para que y hasta que usted llegue a algo más allá de la simple devolución parcial funciona EXCELENTE!

    EDIT: También tendrá que actualizar su Acción…

    return Json(new { data = this.RenderPartialViewToString("PartnerApplicationsPartial", objs) });

    necesita cambiar a….

    return PartialView("PartnerApplicationsPartial", objs);

    DE EDICIÓN BASADO EN LOS COMENTARIOS:

    Sin conocer los datos mejor que se envía al servidor yo no te puedo decir qué escribir en el fin de reemplazar a ese método. Sin embargo yo lo haría mirar las propiedades de new AjaxOptions(){}, ya que tiene algunas propiedades adicionales que permiten especificar el nombre de una función de JavaScript para llamar en cuatro estados (antes de/después de/éxito/falla) de la petición Ajax. Así que si usted está necesitando para calcular algo que usted puede hacer esto mediante la especificación de una función de JavaScript que ser procesados antes de que el Ajax se presenta la solicitud.

    También está haciendo un trabajo mucho más, a continuación, necesario para obtener el seleccionado el botón de radio de valor (especialmente puesto que usted está utilizando jQuery).

    Puede reemplazar…

    var radio_check_val=0;
    
    for (i = 0; i < document.getElementsByName('radio').length; i++) {
        if (document.getElementsByName('radio')[i].checked) {
            radio_check_val = document.getElementsByName('radio')[i].value;
        }
    }

    con algo parecido….

    var radio_check_val = $('radio').filter(':checked').val(); 
    //this will only work if there is only one set of radio buttons on the page.
    //Otherwise you will need to add a name to the selector.
    • Que en este caso la función de Ajax debería ser?
    • No entiendo la pregunta ¿puede explicar?
    • El primer bloque de mi código: <script type=»text/javascript»> la función doAjaxPost (myid) { …. $. ajax ( { Lo que debe ser escrito aquí? }); } </ script>
    • lo siento por mi inglés =)
    • ver más reciente edición
    • Ayúdame, por favor! Cómo hacer la petición AJAX de múltiples formas o controladores?
    • Por favor, no tomes a mal esto, pero tengo pocas ganas de seguir poniendo el tiempo en contestar a una pregunta cuando el autor de la pregunta no puede aceptar una respuesta de alguien o upvote ellos si me sirvió….
    • funcionó! Gracias por la ayuda! =)
    • si esto funciona, a continuación, marcar la respuesta como la que resuelve el problema (esto es cierto para cualquier pregunta que se le pregunte). También si la pieza juntos una solución de múltiples respuestas, a continuación, asegúrese de upvote todos los que te ayudaron, así como el marcado de los «MÁS» útil como una solución.

  2. -1

    Usted no debe RedirectToAction. En lugar de redirigir volver PartialView('Registration');.

    Preguntas relacionadas con:

    MVC Devolución Parcial de la Vista como JSON.

    Carga PartialView para AJAX y de la Vista para no petición AJAX

    • Este código se ejecuta en un error. Toda la página se actualiza.
    • Votada abajo, ya que es una link-respuesta única. Esta respuesta no proporcionan de respuesta real.
    • la respuesta de nuevo en 2012 fue el uso de PartialView en lugar de RedirectToAction. ¿Cómo es que el vínculo única respuesta?

Dejar respuesta

Please enter your comment!
Please enter your name here