メモWebアプリケーションを作成しています。
メインページには、「作成と一覧表示および変更」機能が含まれています。
しかし、モデル(作成用)とリスト(リスト用)をコントローラーからビュー(Razor)に渡す方法がわかりません。
これは私のノートモデルです、
[Table("note")]
public class Note
{
[Key]
public int id { get; set; }
[Required(ErrorMessage="Content is required")]
[DisplayName("Note")]
public string content { get; set; }
public DateTime date { get; set; }
[Required(ErrorMessage = "User ID is required")]
[DisplayName("User ID")]
public string userId {get; set;}
public Boolean isPrivate { get; set; }
public virtual ICollection<AttachedFile> AttachedFiles { get; set; }
}
私は試した、
1)
public ActionResult Index()
{
var notes = unitOfWork.NoteRepository.GetNotes();
return View(notes);
}
次に、ビューで、
@model Enumerable<MemoBoard.Models.Note>
//I can not use this, because the model is Enumerable type
@Html.LabelFor(model => model.userId)
そこで、viewModelを作成しました
2)
public class NoteViewModel
{
public IEnumerable<Note> noteList { get; set; }
public Note note { get; set; }
}
コントローラでは、
public ActionResult Index()
{
var notes = unitOfWork.NoteRepository.GetNotes();
return View(new NoteViewModel(){noteList=notes.ToList(), note = new Note()});
}
とビューで、
@model MemoBoard.Models.NoteViewModel
@Html.LabelFor(model => model.note.userId)
見た目は良いですが、ソースビューでは表示されています
<input data-val="true" data-val-required="User ID is required" id="note_userId" name="note.userId" type="text" value="" />
名前は、userIdではなくnote.userIdです。
このケースを挙げてください、私はどのように機能させるためにすべきですか?
アドバイスしてください。
ありがとう
[編集](まず、すべてのアドバイスに感謝します)
次に、このコントローラーを変更するにはどうすればよいですか
[HttpPost]
public ActionResult Index(Note note)
{
try
{
if (ModelState.IsValid)
{
unitOfWork.NoteRepository.InsertNote(note);
unitOfWork.Save();
return RedirectToAction("Index");
}
}catch(DataException){
ModelState.AddModelError("", "Unable to save changes. Try again please");
}
return RedirectToAction("Index");
}
パラメータタイプをNoteViewModelに変更した場合、有効なチェックを行うにはどうすればよいですか?
[HttpPost]
public ActionResult Index(NoteViewModel data)
{
try
{
if (ModelState.IsValid) <===