Отключить все элементы управления (текстовое поле, флажок, кнопку и т. Д.) В представлении (ASP.NET MVC) - PullRequest
6 голосов
/ 13 мая 2009

Во время рендеринга страницы просмотра, основываясь на некотором условии в действии контроллера, я хочу отключить все элементы управления (текстовое поле, флажок, кнопка и т. Д.), Присутствующие в форме на странице просмотра MVC. Есть ли способ сделать это? Пожалуйста, помогите.

Ответы [ 3 ]

10 голосов
/ 13 мая 2009

Вы можете передать флаг представлению, чтобы указать, что оно должно отключить все элементы управления.

вот пример:

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

В представлении (используя jQuery):

   <script type="text/javascript">
$(document).ready(function() {
var disabled = <%=ViewData["disablecontrols"].ToString()%>;
  if (disabled) {
    $('input,select').attr('disabled',disabled);
  }
})
    </script>
1 голос
/ 13 мая 2009

Это действительно зависит от того, как отображаются ваши элементы управления. Мы делаем нечто подобное на практике, за исключением того, что мы устанавливаем элементы управления только для чтения. Это позволяет нам повторно использовать шоу (только для чтения) и редактировать представления.

Я бы лично порекомендовал сделать это, чтобы иметь флаг только для чтения, который устанавливается в представлении с использованием значения в 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, и я бы не советовал делать это, но это альтернатива.

0 голосов
/ 13 мая 2009

Я не думаю, что вы можете сделать это из контроллера, так как представление возвращается после того, как вся другая логика сделана. Однако вы, вероятно, могли бы что-то сделать с библиотеками AJAX, включенными в ASP.NET MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...