Почему проверка моего экрана «Правка» не позволяет установить ноль? - PullRequest
0 голосов
/ 07 февраля 2019

Я добавил поле в модель представления для Document, которое должно позволить пользователю связать его с Tenant.Это прекрасно работает, если пользователь назначает арендатора, но если он выбирает пустую опцию из выпадающего списка, тогда проверка говорит мне, что «поле ItemID является обязательным», где ItemID - это поле в TenantViewModel.

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

namespace TenantPortal.Models
{
    public class DocumentViewModel
    {
        ...

        [UIHint("SelectTenant")]
        public TenantViewModel Tenant { get; set; }
     }

    public class TenantViewModel
    {
        private Tenant _ten = null;

        public int ItemID { get; set; }

        public string Display_Name { get; set; }

        public string Legal_Name { get; set; }

        ...
    }
}

Шаблон редактора: SelectTenant.cshtml

@using CMS.DocumentEngine.Types.Tenantportal
@using TenantPortal.Models
@model TenantViewModel

@{ 
    Layout = null;

    var opts = new SelectList(TenantProvider.GetTenants(), "ItemID", "Display_Name");
}

@Html.DropDownListFor(model => model.ItemID, opts, "(none)")

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Ваше поле ItemID является int, поэтому оно не допускает нулевых значений, поэтому проверка модели не удалась.Попробуйте изменить его на int? (обнуляемый int).Если значение не задано в форме, оно будет нулевым, но если выбрано значение, ItemID будет выбранным значением.

0 голосов
/ 07 февраля 2019

Я закончил тем, что добавил в свою модель представления документа еще одно свойство с именем TenantID, которое связалось со скрытым свойством Tenant, и создал списки выбора для раскрывающихся списков TenantID в представлениях "Создание" и "Редактирование".Это менее элегантно, чем хотелось бы, но работает.

0 голосов
/ 07 февраля 2019

Если вы используете аннотации данных, вы можете добавить валидацию для вашей модели.

См. Мой пример ниже:

public class TenantViewModel
{
    private Tenant _ten = null;

    [Required]
    public int ItemID { get; set; }

    [Required]
    [MaxLength(30)]
    public string Display_Name { get; set; }

    public string Legal_Name { get; set; }

    ...
}

Для получения дополнительной информации о аннотациях данных установите флажок

Кроме того, на стороне действия кода / контроллера вам необходимо использовать ModelState.IsValid проверку, чтобы убедиться, что ваша модель действительна или нет

...