レシピとタグがあるアプリがあります。レシピには複数のタグを含めることができ、タグは複数のレシピに属することができるため、次のモデルがあります。
public class Tag : IModel
{
[Key]
public int ID { get; set; }
[Required(ErrorMessage = "Name is required.")]
public string Name { get; set; }
public virtual ICollection<Recipe> Recipes { get;set; }
}
public class Recipe : IModel
{
[Key]
public int ID { get; set; }
[ForeignKey("Category")]
public int CategoryId { get; set; }
[Required(ErrorMessage = "The Title is required.")]
public string Title { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public virtual Category Category { get; set; }
}
私のレシピコントローラーには、ビューのレシピを返すHttpGetEditアクションがあります。
public ActionResult Edit(int id = 0)
{
Recipe recipe = _recipeService.GetByID(id, "Category,Tags");
if (recipe == null)
{
return HttpNotFound();
}
CreateEditRecipeViewModel viewModel = new CreateEditRecipeViewModel(recipe, PopulateCategoryLookup(recipe));
return View(viewModel);
}
この時点で、レシピのタグコレクションは私のGetById()メソッドによって入力されます。ただし、ビューにコレクションを追加してビューに表示できるようにする方法がわかりません。これが私の現在のビューモデルです:
public class CreateEditRecipeViewModel
{
[HiddenInput]
public int RecipeID { get; set; }
public int CategoryId { get; set; }
[Required(ErrorMessage = "The Title is required.")]
public string Title { get; set; }
}
私の見解では、タグのコンマ区切りリスト(朝食、ベジタリアン、グルテンフリーなど)を含むテキストボックスが必要です。編集ビューが表示されたら、レシピに現在割り当てられている各タグの名前を入力してください。フォームが投稿されたら、タグリストを分割し、HttpPost Editアクションで、値をEFと調整します。
誰かがViewModelとViewで複雑なオブジェクトのコレクションを表現するためのガイダンスを持っているなら、私はそれをいただければ幸いです!
ありがとう、
クリス