Это действительно зависит от того, как отображаются ваши элементы управления. Мы делаем нечто подобное на практике, за исключением того, что мы устанавливаем элементы управления только для чтения. Это позволяет нам повторно использовать шоу (только для чтения) и редактировать представления.
Я бы лично порекомендовал сделать это, чтобы иметь флаг только для чтения, который устанавливается в представлении с использованием значения в ViewData.
Оттуда напишите несколько вспомогательных методов, чтобы различать отключенную и не отключенную разметку. Вы можете создать эту разметку самостоятельно или обернуть существующие методы HtmlHelper, которые предоставляет 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);
}
То, как мы это делаем, - это использование Page_Load (), как в WebForms, чтобы отключить элементы управления сервером. Мы создали несколько пользовательских серверных элементов управления для обработки наших полей формы. Это было в зародыше ASP.NET MVC, и я бы не советовал делать это, но это альтернатива.