MVC3(Razor)传递模型数据

时间:2012-10-20 15:28:26

标签: asp.net asp.net-mvc-3

我正在制作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; }

}

我试过了,

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()});
}

和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) <===

1 个答案:

答案 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)