【问题标题】:Return two lists to the view c# mvc将两个列表返回到视图 c# mvc
【发布时间】:2013-11-19 07:11:28
【问题描述】:

我有两个要返回视图的列表,“已添加”和“已删除”。但是目前我只能返回“添加”或“删除”。我怎样才能在一个对象中返回两者?我对 MVC 很陌生,如果这段代码乱七八糟,我深表歉意!

public ActionResult Index()
    {
        // Excel upload history

        var fptexcel = db.FPTStaticDataRatedFinancialAssetBase
                       .OrderBy(e => e.FORATExcelId)
                       .Select(e => e.FORATExcelId).Max();

        var fptexcelprevious = fptexcel - 1;

        var newassets = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
                        .Where(c => c.FORATExcelId == fptexcel || c.FORATExcelId == fptexcelprevious)
                        .GroupBy(x => x.Name)
                        .Where(c => c.Count() == 1)
                        .Select(y => y.FirstOrDefault()).ToList();

        var added = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
                         .Where(x => x.FORATExcelId == fptexcelprevious)
                         .Select(x => x).ToList();

        var removed = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
                         .Where(x => x.FORATExcelId == fptexcel)
                         .Select(x => x).ToList();

        return View(newassets.Except(added).ToList());

    }

【问题讨论】:

  • 您希望它们在同一个列表中还是在两个单独的列表中?
  • 好吧,我在视图中有两个 html 网格,一个用于添加资产,一个用于删除资产,所以我想它们需要保持拆分?

标签: c# asp.net-mvc linq asp.net-mvc-viewmodel


【解决方案1】:

为什么没有包含这 2 个列表的 ViewModel

return View(new MyModel{List1 = list1,List2 = list2});

ViewData["List1"] = list1;
ViewData["List2"] = list2;
return View();

看看这里:http://www.howmvcworks.net/OnViews/BuildingAStronglyTypedView

我想你想要第一个。

【讨论】:

  • 我不建议 ViewData,第一种方式是最好的方式。
【解决方案2】:

强烈键入您的视图,使其作为关联模型,即包含两个列表的自定义对象。请注意,此类对象通常称为“viewModel”。

例子:

您的视图模型:

public class MyViewModel
{
    public List<X> Added { get; set; }
    public List<X> Removed { get; set; }
}

你的控制器:

public ActionResult Index()
{
    var viewModel = new MyViewModel
    {
        Added = ...,
        Removed = ...
    };
    return View(viewModel);
}

你的看法:

@model XXXXX.MyViewModel
...

【讨论】:

  • 作为附录,为了访问视图中的列表,您将使用诸如“@Model.Added”和“@Model.Removed”之类的语法
【解决方案3】:

尝试使用像 ViewBag 这样的动态类型

您可以在 Razor 视图中访问 @viewbag

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多