2009-05-13 17 views

Odpowiedz

10

można przekazać flagę do widoku, aby wskazać, że musi ona wyłączyć wszystkie kontrolki.

Oto przykład:

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

W widoku (przy użyciu 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

To zadziałało dla mnie ... Dzięki – Ravi

+0

Awesome Cheers - działa świetnie dla mnie dzięki! – wubblyjuggly

0

Nie sądzę, że można to zrobić z kontrolera, ponieważ widok jest zwracany po zakończeniu wszystkich innych logiki. Prawdopodobnie możesz jednak coś zrobić z bibliotekami AJAX dołączonymi do ASP.NET MVC.

1

To naprawdę zależy od tego w jaki sposób kontrole są renderowane. W praktyce robimy coś podobnego, z wyjątkiem tego, że ustawiliśmy sterowanie tylko do odczytu. Pozwoli nam to ponownie wykorzystywać wyświetlenia (tylko do odczytu) i edytować widoki.

Sposób, w jaki osobiście poleciłbym to zrobić, to ustawienie flagi "tylko do odczytu", która jest ustawiona w widoku przy użyciu wartości w ViewData.

Stamtąd należy napisać kilka metod pomocniczych, aby odróżnić znaczniki wyłączone i niewłączone. Możesz zbudować ten znacznik samodzielnie lub zawinąć istniejące metody HtmlHelper, które zapewnia 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); 
} 

Sposób, w jaki to zrobić jest użycie Page_Load(), tak jak w WebForms, aby wyłączyć kontrolę serwera. Zbudowaliśmy kilka niestandardowych kontroli serwera, aby obsłużyć nasze pola formularza. Było to w dzieciństwie ASP.NET MVC i nie polecałbym tego, ale jest to alternatywa.

Powiązane problemy