none
enviar los controles de la vista por ajax para manipularlos desde el controlador con FindControlRecursive RRS feed

  • Pregunta

  • Hola Mundo

    Tengo en mi vista ciertos campos bloqueados, y estos los quiero desbloquear si el usuario tiene permisos.

    a continuación dejo lo que es la vista

        <fieldset class="scheduler-border">
            <div class="form-horizontal" id="FormResena">
                <div class="form-group cajaOculta" style="color:#6D6E71">
                    @Html.Label("Número Tramite", new { @class = "col-md-2 control-label asterisk" })
                    <div class="col-md-4">
                        @Html.TextBox("TbNumeroTramite", "", new { @class = "form-control existe Mayus", @disabled = "disabled" })
                        <div id="errorPrimerNombre" style="display:none;" class="red">Campo obligatorio</div>
                    </div>
    
                    @Html.Label("Código Proceso", new { @class = "col-md-2 control-label asterisk" })
                    <div class="col-md-4">
                        @Html.TextBox("TbCodigoProceso", "", new { @class = "form-control existe  Mayus", @disabled = "disabled" })
                    </div>
                </div>
                <div class="form-group cajaOculta" style="color:#6D6E71">
                    @Html.Label("Juzgado Asignado", new { @class = "col-md-2 control-label asterisk" })
                    <div class="col-md-8">
                        @Html.TextBox("TbNombreDespacho", "", new { @class = "form-control existe Mayus", @disabled = "disabled", @style = "max-width: 100%" })
                    </div>
                </div>
            </div>
        </fieldset>

    ya después para irme al correspondiente controlador lo hago de la siguiente forma, creando un script con un método con ajax enviando dos variables hacia el controlador, "desde el ajax no estoy seguro si lo estoy haciendo bien"

    <script type="text/javascript">
        $(document).ready(function () {
            validarPermisos();
        });
    
        function validarPermisos() {
            var data1 = this;
            var data2 = "TbNumeroTramite,TbCodigoProceso,TbNombreDespacho";
            $.ajax({
                url: '@Url.Action("ValidarPermisos", "ConsultaProceso")?',
                type: "GET",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                data: { _Control: data1, _TextBox: data2},
                cache: false,
                success: function (result) {
                },
                error: function(jqXHR, textStatus, error) {
                $('.model-status').text("Estado: Error inesperado");
                }
            });
        }
     </script>

    ya después dentro del controlador tengo el método con ActionResult que recibe los datos enviados del ajax.

    "ya aca tengo problemas ya que no me llega nada, ni me entra al metodo esta sacando un error que lo dejo al final".

            public ActionResult ValidarPermisos(Control _Control, string _TextBox) 
            {
                var list_TexBox = _TexBox.Split(',');
    
                foreach (string item in list_TextBox) {
    
                    TextBox objPanel = FindControlRecursive(_Control, item) as Panel;
    
                    if (permisos)
                    {
                        objPanel.Visible = true;
                    }
                    else
                    {
                        objPanel.Visible = false;
                    }
                }
                return Json(new { data = false }, JsonRequestBehavior.AllowGet);
            }

    Despues tengo el FindControlRecursive que es el mismo que he visto en varios lados.

    private Control FindControlRecursive(Control Root, string Id)
            {
                if (Root.ID == Id) return Root;
    
                foreach (Control Ctl in Root.Controls)
                {
                    Control FoundCtl = FindControlRecursive(Ctl, Id);
                    if (FoundCtl != null) return FoundCtl;
                }
    
                return null;
            }

    el error que me da desde la consola es:

    martes, 9 de marzo de 2021 2:40

Respuestas

  • Hay un problema básico de fondo que hará que no funcione lo que haces, incluso después de que resuelvas el problema de que no te llegan datos al controlador: El FindControlRecursive solo vale para aplicaciones WebForms, en las que los controles son conocidos en lado servidor. Pero la tuya es una aplicación MVC, en la que no hay "controles" en el lado servidor, sino que la vista directamente genera HTML que se envía al navegador y genera únicamente controles de lado cliente. Por lo tanto, no puedes buscar un control para manipularlo en la misma forma en la que lo harías en un aspx.
    martes, 9 de marzo de 2021 7:09

Todas las respuestas

  • Hay un problema básico de fondo que hará que no funcione lo que haces, incluso después de que resuelvas el problema de que no te llegan datos al controlador: El FindControlRecursive solo vale para aplicaciones WebForms, en las que los controles son conocidos en lado servidor. Pero la tuya es una aplicación MVC, en la que no hay "controles" en el lado servidor, sino que la vista directamente genera HTML que se envía al navegador y genera únicamente controles de lado cliente. Por lo tanto, no puedes buscar un control para manipularlo en la misma forma en la que lo harías en un aspx.
    martes, 9 de marzo de 2021 7:09
  • Hola,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    martes, 9 de marzo de 2021 14:58
    Moderador