MVC Razor проверить радио вход для включения - PullRequest
0 голосов
/ 31 марта 2020

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

Ошибка «строка» не содержит определения для «Режимы» enter image description here

отладчик

enter image description here

Вид

    <label for="RegimenReferencesC_@Model">
        <input type="radio" id="RegimenReferencesC_@Model" checked="@(Model.Regimens == (int)RegimenReferences.D ? "true" : "false")"  name="RegimenReferences" value="@((int)RegimenReferences.C)" class="regimen-reference">
        (c) @RegimenReferences.C.ToDescriptionString()
    </label>
Tried it this way too
    <label for="RegimenReferencesD_@Model">
        <input type="radio" id="RegimenReferencesD_@Model" name="RegimenReferences" checked="@(Model.Regimens == (int)RegimenReferences.D ? true : false)" value="@((int)RegimenReferences.D)" class="regimen-reference">
        (d) @RegimenReferences.D.ToDescriptionString()
    </label>

Модель

public class ReferencesModel
{
    public long id { get; set; }
    public string Link { get; set; }
    public string Text { get; set; }
    public string Type { get; set; }
    public int Regimens { get; set; }
    public Guid? GuidelineId { get; set; }
    public int SortOrder { get; set; }
}

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

В вашем сообщении отсутствует какой-либо соответствующий код, поэтому я собираюсь заполнить пробелы предположениями:

Учитывая следующий класс и перечисление:

public class ReferencesModel
{
    public long id { get; set; }
    public string Link { get; set; }
    public string Text { get; set; }
    public string Type { get; set; }
    public int Regimens { get; set; }
    public Guid? GuidelineId { get; set; }
    public int SortOrder { get; set; }
}

public enum RegimenReferences
{
    [Description("This is A")]
    A = 0,
    [Description("This is B")]
    B = 1,
    [Description("This is C")]
    C = 2,
    [Description("This is D")]
    D = 3
}

и следующий помощник метод для отображения текста аннотации перечисления:

    public static string ToDescriptionString<T>(this T e) where T : IConvertible
    {
        if (e is Enum)
        {
            Type type = e.GetType();
            Array values = System.Enum.GetValues(type);

            foreach (int val in values)
            {
                if (val == e.ToInt32(CultureInfo.InvariantCulture))
                {
                    var memInfo = type.GetMember(type.GetEnumName(val));
                    var descriptionAttribute = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault() as DescriptionAttribute;

                    if (descriptionAttribute != null)
                    {
                        return descriptionAttribute.Description;
                    }
                }
            }
        }

        return null;
    }

Ваш код Razor будет следующим для использования переключателя и проверка базы на значение:

<label for="RegimenReferencesD_@Model">
<input type="radio" id="RegimenReferencesC_@Model" @if (Model.Regimens == (int)RegimenReferences.D) { Html.Raw("checked"); } name="RegimenReferences" value="@((int)RegimenReferences.D)" class="regimen-reference">
(D) @RegimenReferences.D.ToDescriptionString()
</label>
1 голос
/ 01 апреля 2020

Из <label for="RegimenReferencesC_@Model"> ясно, что @Model в представлении Razor - это строка, или эта строка не будет работать.

Поэтому, когда вы пытаетесь @(Model.Regimens ..., вы получаете ошибку, так как строка не имеет свойства или метода с именем Regimens.

Другими словами, проверьте свою модель в представлении. Вероятно, это строка, а не объект, который вы ищете.

...