gpt4 book ai didi

asp.net-mvc - 在 MVC5 Razor View 中传递动态模型

转载 作者:行者123 更新时间:2023-12-02 03:36:51 25 4
gpt4 key购买 nike

我正在尝试将动态结果从 Controller 传递到 View ,方法 ShowColor返回动态结果。在 View 中,我尝试循环遍历集合,但收到错误

'object' does not contain a definition for 'ColorID'.

我在 Controller 和 View 中有以下代码

public class myColor
{
public int ID { get; set; }
public string Name { get; set; }
public string Like { get; set; }
}

public dynamic ShowColor()
{
IList<myColor> color = new List<myColor>();
color.Add(new myColor { ID = 1, Name = "Red", Like = "***" });
color.Add(new myColor { ID = 2, Name = "Green", Like = "*****" });
color.Add(new myColor { ID = 3, Name = "Blue", Like = "**" });
color.Add(new myColor { ID = 4, Name = "Yellow", Like = "*" });

var select = (from c in color
select new
{
ColorID = c.ID,
ColorName = c.Name
}).ToList();

return select;
}
public ActionResult DBDynamic()
{
return View(ShowColor());
}

查看

@model dynamic

@{
ViewBag.Title = "DBDynamic";
}

<h2>DBDynamic</h2>

<p>
<ul>
@foreach (var m in Model)
{
<li> @m.ColorID</li>
}
</ul>

</p>

Error

Debug Image

找到解决方案 here和一个不错的博客here :

public static ExpandoObject ToExpando(this object anonymousObject)
{
IDictionary<string, object> expando = new ExpandoObject();
foreach (PropertyDescriptor propertyDescriptor in TypeDescriptor.GetProperties(anonymousObject))
{
var obj = propertyDescriptor.GetValue(anonymousObject);
expando.Add(propertyDescriptor.Name, obj);
}

return (ExpandoObject)expando;
}

这样调用它

    var select = (from c in color
select new
{
ColorID = c.ID,
ColorName = c.Name
})
.AsEnumerable()
.Select(x => x.ToExpando());

return View(select);

最佳答案

匿名对象与动态不同。如果您想像 dynamic 一样使用它,则将其转换为:

@foreach (dynamic m in Model)

但是,如果可能的话,最好避免动态。你会失去所有编译时检查,甚至智能感知。在运行时之前,您不会知道是否误操作了属性名称,或者即使在运行时之前,您不小心以错误的方式使用了错误类型的事物。如果某些东西被破坏,您希望在编译时知道它,而不是当它已经存在并影响用户时,当您甚至可能不知道发生了错误,除非用户通知您。对于您的应用来说,这是一个可怕的情况。

长和短,使用强类型。如果您想要具有 ColorIDColorName 属性的内容,请使用这些属性创建一个 View 模型,然后将查询选择到该类型的实例中。然后,一切都会很好并且是强类型的,并且您会提前知道代码是否存在错误或问题。

关于asp.net-mvc - 在 MVC5 Razor View 中传递动态模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27363711/

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