Как привязать флажок к строковому свойству в asp net mvc - PullRequest
4 голосов
/ 02 сентября 2011

В моих классах было несколько полей, представляющих true или false, но в нем есть строковые значения "T" или "F".

Как привязать флажок к этим полям?

Ответы [ 3 ]

7 голосов
/ 02 сентября 2011

Вы можете сделать это в ASP.Net MVC Razor

<input type="checkbox" name="someName" value="@Model.SomeValue" 
@(Model.IsChecked == "T" ? "checked='checked'" : "") />

Тем не менее, это может быть не то, что вы ищете, так как вам придется выполнить некоторую ручную работу на сервере, чтобы выяснить значения, которые были «не проверены».

По умолчанию только ваши проверенные значения будут отправляться на сервер.

UPDATE:

Оба вспомогательных метода Html.CheckBox и Html.CheckBoxFor генерируют скрытые поля , чтобы убедиться, что все правильно привязано к вашей модели. Вы можете довольно легко имитировать это поведение.

Сначала вам нужно создать скрытое поле, которое будет привязано к вашей модели на сервере.

@Html.HiddenFor(model => model.StringBool, new { id = "_stringBool" })

Затем вы создаете простой флажок jane и устанавливаете начальное состояние для отображения вашей модели.

<input type="checkbox" id="myCheckBox" @(Model.StringBool == "T" ? "checked='checked'" : "") />

Единственная цель этого флажка - передавать значения в скрытое поле и из него, чтобы ваша модель автоматически привязывалась к серверу. Это можно сделать с помощью простого jQuery.

$("#myCheckBox").click(function () {
   var isChecked = $(this).is(":checked");

   $("#_stringBool").val(isChecked ? "T" : "F");
});

Теперь установив и сняв флажок, вы соответственно установите значение вашего скрытого скрытого поля. При публикации на сервере ваши значения будут сохранены с помощью привязки модели.

Что стоит отметить

Это не учитывает проверку. Изменить значение скрытого поля очень просто, поэтому убедитесь, что вы правильно проверили на стороне сервера!

0 голосов
/ 23 марта 2012

Я сделал собственное расширение для решения этой проблемы.Это немного опрятно в обзоре бритвы, помогает минимизировать смесь c # / бритвы.Вот класс:

public static class CheckBoxExtensions {

    public static MvcHtmlString ValueCheckbox<TModel>(this HtmlHelper<TModel> htmlHelper, string name, string value, bool isChecked, IDictionary<string, object> htmlAttributes, bool disabled = false)
    {
        string result = string.Format(CultureInfo.InvariantCulture, 
            "<input type=\"checkbox\" name=\"{0}\" value=\"{1}\" {2} {3} ",
            name, value, (isChecked) ? "checked=\"checked\"" : "", (disabled) ? "disabled=\"disabled\"" : "");

        if (htmlAttributes != null && htmlAttributes.Count > 0)
        {
            foreach (KeyValuePair<string, object> item in htmlAttributes)
            {
                result += string.Format(CultureInfo.InvariantCulture, "{0}=\"{1}\" ", item.Key, item.Value.ToString());
            }
        }

        result += " />";

        return new MvcHtmlString(result);
    } 
}

И это то, что я делаю в Razorview:

Html.ValueCheckbox("SelectedItems", 
    item.Number, 
    (Model.SelectedItems.Contains(item.Number)), 
    new Dictionary<string, object>() { 
        { "data-disable-bubble", "true" }, 
        { "data-forms-enable-any-checked-checkbox", "true" } 
    }
)

Не возражайте против причудливых атрибутов HtmlAttributes, я решил, что я просто позволю им туда :-)

0 голосов
/ 02 сентября 2011

Когда вы устанавливаете контрольное состояние новых элементов флажка, просто добавьте оператор if:

checkBox1.Checked = (stringValue == "T")? true: false;

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