【问题标题】:Passing values to view in Asp.net MVC3传递值以在 Asp.net MVC3 中查看
【发布时间】:2012-08-24 04:19:20
【问题描述】:

我有两张表 Date 和 Song。其中 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 在视图中。但是 return View 只采用一个参数。有没有办法将两个表数据都传递给查看?

【问题讨论】:

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


    【解决方案1】:

    有两种选择:

    1. 使用ViewBag

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

    请注意,2 是首选选项,因为它允许您保持强类型(ViewBag 使用 dynamic 类型)。

    【讨论】:

    • @dbaseman - 您认为在 Index() 下添加 5 或 6 个 ViewBag 是很好的设计吗?还是我应该使用一个类?
    • @NoviceMe 绝对最好使用类...在大多数情况下最好避免使用 ViewBag。
    【解决方案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>
    }
    

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

    【讨论】:

    • 首先感谢您的代码!我还有几个问题。那么这个 ViewModel 类将成为 Controller 的一部分吗?还是查看?另外,这个类应该用 Song 和 Date 表调用另外两个类并填充所有字段?这不就像写重复的代码吗?因为我已经为歌曲和日期表定义了类?再次感谢您花时间编写代码!
    • @NoviceMe 这将是一个单独的类,仅定义在视图中显示信息所需的属性。我知道您可能会觉得您在复制信息,但这是一个好方法。视图模型应该只包含这些需要的字段。不多也不少。此类可能存在于应在新 MVC 应用程序中创建的 Models 目录中,并将如上所述填充到您的控制器中,然后在视图中引用,如上所述。
    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 2011-12-02
    • 2015-09-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多