2009-05-13 15 views

risposta

10

è possibile passare un flag alla vista per indicare che deve disabilitare tutti i controlli.

Ecco un esempio:

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

Nella 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

Ha funzionato per me ... Grazie – Ravi

+0

Awesome Cheers - funziona alla grande per me grazie! – wubblyjuggly

0

Non penso che sia possibile farlo dal controller, poiché la vista viene restituita dopo che tutta l'altra logica è stata eseguita. Probabilmente potresti fare qualcosa, comunque, con le librerie AJAX incluse con ASP.NET MVC.

1

Che in realtà dipende da come i controlli vengono resi. Facciamo qualcosa di simile in pratica, tranne che impostiamo i controlli in sola lettura. Questo per permetterci di riutilizzare show (sola lettura) e modificare le viste.

Il modo in cui lo raccomando personalmente è di avere un flag di sola lettura impostato nella vista utilizzando un valore in ViewData.

Da lì, scrivere alcuni metodi di supporto per distinguere tra markup disabilitato e non disabilitato. È possibile creare questo markup da soli oppure eseguire il wrapping dei metodi HtmlHelper esistenti forniti da 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); 
} 

Il modo in cui lo facciamo è quello di utilizzare il Page Load(), come si farebbe in WebForms, per disattivare i controlli del server. Abbiamo creato alcuni controlli server personalizzati per gestire i nostri campi modulo. Questo era nell'infanzia di ASP.NET MVC e non raccomanderei di farlo, ma è un'alternativa.

Problemi correlati