传递值以在Asp.net MVC3中查看

时间:2012-08-24 04:19:20

标签: asp.net-mvc asp.net-mvc-3 c#-4.0 asp.net-mvc-viewmodel

我有两张桌子日期和歌曲。其中DateId是Song表的外键。

 - Date:
   DateId
   Date
 - Song:
   SongId
   DateId
   Title

这是功能:

public ActionResult Index()
        {            
            var song = db.TopSongs;
            var model = db.Dates;
            var latestDate = model.OrderByDescending(d => d.Date).FirstOrDefault();
            return View(latestDate);
        }

我需要表明: 视图中的Date SongId Title。但是返回View只占用一个参数。有没有办法将两个表数据传递给查看?

2 个答案:

答案 0 :(得分:2)

有两种选择:

  1. 使用ViewBag

    ViewBag.song = db.TopSongs;
    ViewBag.model = db.Dates
    ViewBag.latestDate = model.OrderByDescending(d => d.Date).FirstOrDefault();
    
  2. 创建一个包含所需信息的新类,并返回该类(即view model)。

  3. 请注意 2 是首选选项,因为它可以让您保持强打字(ViewBag使用动态类型)。

答案 1 :(得分:2)

您需要创建“查看模型”;

public class ViewModel
{
    public int SongId { get; set; }
    public DateTime Date { get; set; }
    public string Title { get; set; }
    //More properties that are needed in View
}

然后填充这个;

var viewModel = new List<ViewModel> { //Populate code here };

将此填充的视图模型传递给视图

return (viewModel);

在视图中引用它;

@model IEnumerable<ViewModel>

最后,在View中显示;

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
    </tr>
}

请注意,您的视图模型的实际属性会有所不同,上面的代码只是为了展示您如何实现这一目标。