Просмотр сообщения об ошибке при генерации: строка не была распознана как допустимое логическое значение - PullRequest
3 голосов
/ 05 марта 2012

На странице администратора я изначально генерировал несколько флажков в представлении, как показано ниже:

Модель:

public class Foo
{
    public const string Bar = "SomeString";
}

Представление:

@Html.CheckBox(Foo.Bar)
@Html.Label(Foo.Bar)

Однако,Я хотел изменить отображаемое имя нескольких флажков, поэтому я создал модель представления (чтобы позже добавить атрибут отображаемого имени):

public class FooViewModel
{
     public string Bar
     {
         get { return Foo.Bar; }
     }
}

И изменил представление:

@Html.CheckBox(Model.Bar)
@Html.LabelFor(m => m.Bar)

Однако представление теперь генерирует ошибку при отображении флажка:

Строка не была распознана как допустимое логическое значение

Обратите внимание, что если я изменю свойствоимя в модели представления, отличное от «Bar», представление отображается правильно.EG:

public class FooViewModel
{
     public string WTF
     {
         get { return Foo.Bar; }
     }
}

@Html.CheckBox(Model.WTF)
@Html.LabelFor(m => m.WTF)

Кто-нибудь может объяснить мне, почему эта ошибка возникает, если мое свойство viewmodel называется "Bar"?

Редактировать : я обновил свой вопроснемного видя как, я создаю некоторую путаницу.Представление используется в качестве формы поиска, а флажки просто используются для выбора «критерия поиска».

Я создаю флажок таким образом, чтобы имя / идентификатор флажка было связано с соответствующей бизнес-логикой в ​​контроллере.

Я знаю, что код не будет компилироваться, если свойствоимя / имя поля в пределах одного и того же класса идентичны.Это не проблема, так как я просто инициализирую свойство из константы в другом пространстве имен.

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Вы не можете иметь константу с именем Bar и свойство с именем Bar:

public class Foo
{
    public const string Bar = "SomeString";

    public string Bar
    {
        get { return Foo.Bar; }
    }
}

Этот фрагмент кода недопустим в C # и даже не компилируется.

Говорят, что CheckBox/CheckBoxFor помощники в ASP.NET MVC работают с логическими значениями. Поэтому я действительно не понимаю, почему вы даже пытаетесь связать его со строковым свойством и целью этой Bar строковой константы.

Правильно было бы иметь следующую модель вида:

public class MyViewModel
{
    [Display(Name = "som estring")]
    public bool MyBoolValue { get; set; }
}

и в строго типизированном виде:

@Html.LabelFor(x => x.MyBoolValue)
@Html.CheckBoxFor(x => x.MyBoolValue)
0 голосов
/ 05 марта 2012

Использование другого конструктора флажков решает проблему:

@Html.CheckBox(Model.Bar, false)
@Html.LabelFor(m => m.Bar)
...