我正在制作Memo网络应用程序。
,主页面包含“创建,列表和修改”功能。
但我不知道如何从控制器传递Model(for create)和List(for List)到View(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; }
}
我试过了,
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
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()});
}
和In View,
@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="" />
名称 note.userId 不是 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) <===
答案 0 :(得分: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)