[英]Why won't my Edit screen validation allow null?
我在Document
的视图模型中添加了一个字段,该字段应允许用户将其与Tenant
关联。 如果用户确实分配了一个租户,那么它工作正常,但是如果他们从下拉列表中选择了null选项,那么验证将告诉我“ 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)")
如果使用数据批注,则可以向模型添加验证。
请参阅下面的示例:
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.