繁体   English   中英

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

[英]Why won't my Edit screen validation allow null?

我在Document的视图模型中添加了一个字段,该字段应允许用户将其与Tenant关联。 如果用户确实分配了一个租户,那么它工作正常,但是如果他们从下拉列表中选择了null选项,那么验证将告诉我“ ItemID字段是必需的。”,其中ItemIDTenantViewModel上的一个字段。

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

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)")

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

请参阅下面的示例:

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检查以验证模型是否有效。

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

我最终在我的文档视图模型中添加了另一个名为TenantID ,让它与幕后的Tenant属性进行通信,并在Create和Edit视图中为TenantID下拉列表创建SelectLists。 它不像我想要的那么优雅,但是可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM