2009-05-13 19 views

Respuesta

10

puede pasar un indicador a la vista para indicar que debe deshabilitar todos los controles.

aquí es un ejemplo:

public ActionResult MyAction() { 
ViewData["disablecontrols"] = false; 
if (condition) 
{ 
    ViewData["disablecontrols"] = true; 
} 
return View(); 
} 

En la vista (usando jQuery):

<script type="text/javascript"> 
$(document).ready(function() { 
var disabled = <%=ViewData["disablecontrols"].ToString()%>; 
    if (disabled) { 
    $('input,select').attr('disabled',disabled); 
    } 
}) 
    </script> 
+0

.............. jQuery rockz! –

+0

Funcionó para mí ... Gracias – Ravi

+0

Awesome Cheers - funciona genial para mí, gracias. – wubblyjuggly

0

No creo que pueda hacer eso desde el controlador, ya que la vista se devuelve después de que se haya completado toda la otra lógica. Sin embargo, probablemente puedas hacer algo con las bibliotecas AJAX incluidas con ASP.NET MVC.

1

Eso realmente depende de cómo están siendo generados sus controles. Hacemos algo similar en la práctica, excepto que establecemos controles solo de lectura. Esto es para permitirnos reutilizar show (solo lectura) y editar vistas.

La forma en que personalmente recomendaría hacerlo es tener un indicador de solo lectura que se establece en la vista utilizando un valor en ViewData.

A partir de ahí, escriba algunos métodos de ayuda para distinguir entre marcado deshabilitado y no deshabilitado. Puede construir este marcado usted mismo o ajustar los métodos HtmlHelper existentes que proporciona ASP.NET MVC.

// In your controller 
ViewData["DisableControls"] = true; 

<%-- In your view --%> 
<% bool disabled = ViewData["DisableControls"] as bool; %> 
... 
<%= Html.TextBox("fieldname", value, disabled) %> 
<%= Html.CheckBox("anotherone", value, disabled) %> 

// In a helper class 
public static string TextBox(this HtmlHelper Html, string fieldname, object value, bool disabled) 
{ 
    var attributes = new Dictionary<string, string>(); 
    if (disabled) 
     attributes.Add("disabled", "disabled"); 
    return Html.TextBox(fieldname, value, attributes); 
} 

La forma en que lo hacemos es utilizar el Load(), como lo haría en formularios Web, para desactivar los controles de servidor. Creamos algunos controles de servidor personalizados para manejar nuestros campos de formulario. Esto fue en la infancia de ASP.NET MVC, y no recomendaría hacer esto, pero es una alternativa.

Cuestiones relacionadas