为什么我的“编辑”屏幕验证不允许为空?

时间:2019-02-07 17:52:37

标签: c# asp.net-mvc mvc-editor-templates

我在Document的视图模型中添加了一个字段,该字段应允许用户将其与Tenant关联。如果用户确实分配了租户,则效果很好,但是如果用户从下拉列表中选择了null选项,则验证会告诉我“ ItemID字段为必填项。”,其中ItemID是{{1 }}。

在我看来,可能是我使用的编辑器模板不正确-我试图从租户列表中进行选择,而不是编辑租户。如果那是错误的,请告诉我,也许会建议一个更好的方法来获得下拉列表。

TenantViewModel

编辑器模板:SelectTenant.cshtml

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; }

        ...
    }
}

3 个答案:

答案 0 :(得分:1)

如果使用数据注释,则可以向模型添加验证。

请参阅下面的示例:

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; }

    ...
}

有关数据注释check this

的更多信息

此外,在代码/控制器操作方面,您需要使用ModelState.IsValid检查以验证模型是否有效

答案 1 :(得分:1)

您的ItemID字段是int,因此不允许空值,因此模型验证失败。尝试将其更改为int?(可为null的int)。如果未在表单中设置值,则该值将为null,但是如果选择了某个值,则ItemID将成为所选值。

答案 2 :(得分:0)

我最终向我的文档视图模型添加了一个名为TenantID的属性,使其与幕后的Tenant属性进行通信,并为两个TenantID下拉列表创建了SelectLists创建和编辑视图。它没有我想要的那么优雅,但可以。