0

メモ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) <===
4

1 に答える 1

1
@model Enumerable<MemoBoard.Models.Note> 
//I can not use this, because the model is Enumerable type 
@Html.LabelFor(model => model.userId) 

foreachループまたはリターンリストで使用して、forループで使用できます

the name is note.userId not userId.

これは正常です。これはモデルバインディング用に作成されました

これを試して:

Html.TextBox("userId", Model.note.userId, att)
于 2012-10-20T15:37:19.010 に答える