2016-08-14 2 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

文字列の場合は、文字列値のビューモデルに文字列プロパティを追加し、 '[必須]'属性でマークするのはどうですか? – 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アクションメソッド内では、あなたのエンティティのオブジェクトを作成し、ビューから値を設定しますメソッドのパラメータであるモデルオブジェクトです。 Splitメソッドを使用すると、コンマ区切りの文字列を分割できます。

[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; } 
関連する問題