gpt4 book ai didi

c# - 绑定(bind) Linq Lambda 从 Controller 中选择多个以在 MVC4 中查看?返回 View 的最佳方式是什么

转载 作者:太空宇宙 更新时间:2023-11-03 12:58:30 26 4
gpt4 key购买 nike

我是 Linq 的 MVC 新手。当我使用控制台应用程序时,它工作正常。
当我转向 Mvc 架构时,将值从 Controller 传递到 View 时出现错误

传入字典的模型项的类型为“System.Collections.Generic.List 1[<>f__AnonymousType2” 2[System.String,System.String]]',但是这个字典需要一个类型为'System.Collections.Generic.IEnumerable`1[MvcApplication2.Models.Teams]'的模型项。

我知道我正在将对象作为 stringName、String 及其期望的 'System.Collections.Generic.IEnumerable 如何解决此类问题

这种情况发生在 Linq 中的多个 groupby 和 Selectmany 中。如何传递值并进入 View 的绑定(bind)。什么是最佳方法。

我在 Controller 中放置了一个 foreach 并返回,或者在 View 中为 selectMany、Groupby、Lookup 等执行 foreach 迭代。

型号

public Class Product
{
public string CategoryName {get; set; }
public int Productid { get; set; }
public List<String> Productname { get; set; }

public static List<Product> GetAllProductName()
{
var ListofProducts = new List<Product>
{
new Product { CategoryName = "Choclateid", Productid = 1, Productname = new List<string> { "DairyMilkshots", "DairyMilk Silk", "DairyMilkFruitsNuts" }},
new Product { CategoryName = "Vegetables", Productid = 2, Productname = new List<string> { "Tomoto", "Pototo", "Onion"}},
new Product { CategoryName = "Fruits", Productid = 3, Productname = new List<string> {"Apple", "Orange", "Strawberry"}},
};
return ListofProducts;
}
}

Controller

public ActionResult Home()
{
var ny = Product.GetAllTeamMembers()
.SelectMany(x => x.Productname, (category, withProductlist) =>
new { cat = category.CategoryName, PN = Productname })
.ToList();

return View(ny);
}

查看

@model IEnumerable< MvcApplication2.Models.Product>

@{
ViewBag.Title = "Selectmany";
}

<h2>@ViewBag.Message</h2>
<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>
@{
foreach(var k in Model)
{
@K.CategoryName<br/>
@k.Productname<br/>
}
}

控制台

var ny = Product.GetAllTeamMembers().SelectMany(x => x.Productname,
(category, withProductlist) =>
new { cat = category.CategoryName, PN = Productname };

foreach(var n in ny)
{
Console.WriteLine(n.cat + "\t" + "-" + n.PN);
}

输出

Choclate -DairyMilkshots DairyMilk Silk DairyMilkFruitsNuts
Vegetables - Tomoto,Pototo,Onion
etc

最佳答案

问题是您的 View 设置为处理显式类型:

@model IEnumerable< MvcApplication2.Models.Product>

但是 LINQ 方法不返回产品类型。您实际上是在使用 LINQ 语句的这一部分返回匿名类型:

(category, withProductlist) => new { cat = category.CategoryName, PN = Productname })

新关键字有助于识别。您的控制台应用程序工作 b/c anynomous 对象具有 PN 和 CategoryName 的属性,但不明确需要某种类型。

这有意义吗?

正如所建议的那样,您应该将调用 Product.GetAllTeamMembers() 的值传递给您的 View 。然后您的 View 应该为该类型分配值。例如,

Controller :

public ActionResult Home()
{
var ny = Product.GetAllTeamMembers();

return view(ny);
}

查看@model IEnumerable< MvcApplication2.Models.Product>

@{  
foreach(var k in Model)
{
@K.CategoryName<br/>
@k.Productname<br/>

}

}

编辑

做你想做的最好的方法是创建一个 View 模型来包含扁平化的信息。这为您提供了所需的数据形状,并允许您在 Controller 中使用该模型。

新 View 模型

public class ProductViewModel
{
public string CategoryName { get; set; }
public string ProductName { get; set; }
}

Controller 逻辑

var ny = Product.GetAllProductName()
.SelectMany(x => x.Productname, (category, withProductlist) =>
new ProductViewModel
{
CategoryName = category.CategoryName,
ProductName = withProductlist
});

风景

@model IEnumerable<ProductViewModel>

重要的部分是在 select many 子句中,您正在转换为已知类型 (ProductViewModel) 而不是匿名类型。

关于c# - 绑定(bind) Linq Lambda 从 Controller 中选择多个以在 MVC4 中查看?返回 View 的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33133036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com