2016-08-14 26 views
2

请帮我解决我的问题。如果文本框TagsSites为空,我希望收到消息。如何验证IList外键?实体框架

我的模型:

网站

 public int Id { get; set; } 
     [Required] 
     public string UserId { get; set; } 
     [Required] 
     public string Name { get; set; } 
     [Required] 
     public string Description { get; set; } 
     [Required] 
     public string TypeMenuId { get; set; } 

     public virtual IList<Page> Pages { get; set; } 
     [Required] 
     public virtual IList<TagSite> TagsSites { get; set; }  
     public virtual TypeMenu TypeMenu { get; set; } 
     public virtual ApplicationUser User { get; set; } 

标签

 public int Id { get; set; } 
     public string Name { get; set; } 

     public virtual IList<TagSite> TagsSites { get; set; } 

TagSite

 public int Id { get; set; } 
     public int SiteId { get; set; } 
     public int TagId { get; set; } 

     public virtual Site Site { get; set; } 
     public virtual Tag Tag { get; set; } 

我现在收到所有空输入的消息。

enter image description here

如何获得信息 “是必需的TagsSites场。” ?

谢谢。

+0

用户应该在标签输入字段中输入什么内容?标记名称用逗号分隔? – Shyju

+0

是的。我使用引导程序标签输入 – noobprogrammer

+0

如果它是一个字符串,为什么不添加一个字符串属性到您的视图模型的字符串值并用'[Required]'属性标记它? – Shyju

回答

1

您应该为您的视图视图模型与属性的逗号分隔标签名称,并与Required属性标记它。

public class CreateSiteVm 
{ 
    [Required] 
    public string Name { set;get;} 
    [Required] 
    public string Description { set;get;} 
    [Required] 
    public string Tags { set;get;} 
    [Required] 
    public int TypeMenuId { set;get;} 
    public List<SelectListItem> TypeMenus { set;get;} 
} 

并在GET动作

public ActionResult Create() 
{ 
    var vm = new CreateSiteVm(); 
    vm.TypeMenus = dbContext.TypeMenus.Select(x=> new SelectListItem { 
                  Value=x.Id.ToString(), 
                  Text=x.Name}).ToList(); 
    return View(vm); 
} 

和在视图,

@model CreateSiteVm 
@using(Html.BeginForm()) 
{ 
    <p>@Html.ValidationSummary(false)</p> 
    <label>Name</label> 
    @Html.TextBoxFor(f=>f.Name) 

    <label>Descsription</label> 
    @Html.TextBoxFor(f=>f.Descsription) 

    <label>Tags</label> 
    @Html.TextBoxFor(f=>f.Tags) 

    <input type="submit" /> 
} 

并在HttpPost动作方法,创建实体的对象,并设置从视图中的值模型对象,它是您的方法参数。您可以使用拆分方法拆分逗号分隔的字符串。

[HttpPost] 
public ActionResult Create(CreateSiteVm model) 
{ 
    if(ModelState.IsValid) 
    { 
    var e=new Site { Name = model.Name, Description = model.Description}; 
    e.TypeMenuId = model.TypeMenuId; 

    var arr = model.Tags.Split(','); 
    foreach (var s in arr) 
    { 
     e.Tags.Add(new Tag { Name = s});  
    } 
    dbContext.Sites.Add(e); 
    dbContext.SaveChanges(); 
    return RedirectToAction("Index"); 
    } 
    //to do : Load the dropdown again same as GET 
    return View(model); 
} 
2

您可能需要的是MinLengthAttribute。实现看起来像这样。

[Required] 
[MinLength (1)] 
public virtual IList <TagSite> TagSites { get; set; }