2016-08-14 25 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; }