2009-05-13 4 views

Répondre

10

Vous pouvez passer un indicateur à la vue pour indiquer qu'il doit désactiver tous les contrôles.

voici un exemple:

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

Dans la vue (en utilisant 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

Cela a fonctionné pour moi ... Merci – Ravi

+0

Awesome Cheers - fonctionne très bien pour moi merci! – wubblyjuggly

0

Je ne pense pas que vous pouvez faire cela à partir du contrôleur, puisque la vue est retournée après que toute l'autre logique est terminée. Vous pourriez probablement faire quelque chose, cependant, avec les bibliothèques AJAX inclus avec ASP.NET MVC.

1

Cela dépend vraiment de la façon dont vos contrôles sont rendus. Nous faisons quelque chose de similaire dans la pratique, sauf que nous mettons les contrôles en lecture seule. Cela nous permet de réutiliser les vues show (lecture seule) et d'édition.

La façon dont je recommande personnellement de le faire est d'avoir un indicateur en lecture seule qui est défini dans la vue en utilisant une valeur dans ViewData. À partir de là, écrivez quelques méthodes auxiliaires pour faire la distinction entre le balisage désactivé et le balisage non désactivé. Vous pouvez créer ce balisage vous-même ou envelopper les méthodes HtmlHelper existantes fournies par 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 façon dont nous le faisons est d'utiliser le Page_Load(), comme vous le feriez dans WebForms, pour désactiver les contrôles serveur. Nous avons construit des contrôles serveur personnalisés pour gérer nos champs de formulaire. C'était dans l'enfance ASP.NET MVC, et je ne recommanderais pas de le faire, mais c'est une alternative.

Questions connexes