ASP.Net MVC HtmlHelper.Checkbox - PullRequest
       5

ASP.Net MVC HtmlHelper.Checkbox

1 голос
/ 16 декабря 2009

Я пытаюсь выяснить, как изменить значение флажка в ASP.Net MVC. По сути, я хочу вернуть значение флажка DefaultModelBinder, чтобы я мог использовать его в методе моего контроллера для манипуляций. На данный момент сгенерированные значения по умолчанию равны true / false для видимого и скрытого ввода соответственно.

Я хочу изменить true / false на что-то другое, например, name / false в противном случае будет возвращать имя значения или пустую строку. Я могу сделать это вручную с помощью HTML-кода, но мне любопытно узнать, как это можно сделать с помощью HTML-помощников. Я просмотрел сеть и MSDN, но не нашел хороших примеров.

Я знаю, что вы можете передать Object ^HTMLAttributes в качестве одного из параметров, но я не уверен, каков правильный синтаксис.

1 Ответ

1 голос
/ 16 декабря 2009

Значения фиксируются в коде HtmlHelper . Вы всегда можете создать свой собственный помощник, используя исходный текст для существующего помощника в качестве руководства или вручную код HTML. Соответствующие фрагменты приведены ниже:

public static string CheckBox(this HtmlHelper htmlHelper, string name, IDictionary<string, object> htmlAttributes) {
    return htmlHelper.InputHelper(InputType.CheckBox, name, "true", true /* useViewData */, false /* isChecked */, true /* setId */, false /* isExplicitValue */, htmlAttributes);
}

public static string CheckBox(this HtmlHelper htmlHelper, string name, bool isChecked, IDictionary<string, object> htmlAttributes) {
    // checked is an explicit parameter, but the value attribute is implicit so the dictionary's must take
    // precedence.
    RouteValueDictionary attributes = htmlAttributes == null ? new RouteValueDictionary() : new RouteValueDictionary(htmlAttributes);
    attributes.Remove("checked");
    return htmlHelper.InputHelper(InputType.CheckBox, name, "true", false /* useViewData */, isChecked, true /* setId */, false /* isExplicitValue */, attributes);
}

И из InputHelper ():

if (inputType == InputType.CheckBox) {
    // Render an additional <input type="hidden".../> for checkboxes. This
    // addresses scenarios where unchecked checkboxes are not sent in the request.
    // Sending a hidden input makes it possible to know that the checkbox was present
    // on the page when the request was submitted.
    StringBuilder inputItemBuilder = new StringBuilder();
    inputItemBuilder.Append(tagBuilder.ToString(TagRenderMode.SelfClosing));

    TagBuilder hiddenInput = new TagBuilder("input");
    hiddenInput.MergeAttribute("type", HtmlHelper.GetInputTypeString(InputType.Hidden));
    hiddenInput.MergeAttribute("name", name);
    hiddenInput.MergeAttribute("value", "false");
    inputItemBuilder.Append(hiddenInput.ToString(TagRenderMode.SelfClosing));
    return inputItemBuilder.ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...