Razor不支持dynamic吗?

圣殿骑士18 2018-01-13 11:45:01
方法中返回的List<dynamic>
在view中循环取出,发现无法解析

public static List<dynamic> genChangeOutViewColumn()
{
List<dynamic> result = new List<dynamic>();
using (var context = new AppDbContext())
{
string valid = EnumValidStatus.Data1.GetEnumItemValue();
var list = context.sam_ba_changetype.Where(c => c.Direction == EnumDirection.Out.ToString() && c.Status == valid)
.OrderBy(c => c.SeqNo).ThenBy(c => c.TypeId).ToList();
for (int i = 0; i < list.Count(); i++)
{
result.Add(new { name = string.Format("TypeOut_{0}", i+1), label = list[i].ChangeName });
}

return result;
}
}


...全文
978 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2018-02-27
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
接口定义设计时不要乱用 dynamic 语法糖。dynamic 应该是在使用时才用的,作为一个功能方法的定义者,如果你连自己输出的数据的类型都不知道,那又何必要输出一个方法呢? 仅仅看
public static List<dynamic> genChangeOutViewColumn()
这个方法定义,应该作为不合格的定义,作为 bug 来看待。这里应该使用 List<含有具体功能内涵的类型> 作为输出参数声明,而不是随便声明 object 集合。
哈,说明一下,返回值用dynamic,是这个问题出现后,在调试过程中做各种修改和尝试的中间状态,不是原始代码。正式代码中并不会这么定义。
  • 打赏
  • 举报
回复
比如说我们干脆不返回 List<dynamic> 了而是返回 dynamic,有没有这种人?大有人在。一旦有一部分代码这样写了,整个系统的将来功能升级、bug修改和运行时的安全就乱了。
  • 打赏
  • 举报
回复
dynamic 是一个语法糖,而语法糖的目的当然就是替代我们写一些繁琐的代码。这是不可否认的。 但是任何事情都有底线、都有边界。使用技术的目的不是“行与不行”的问题,肯定是要找到真实的边界应该放到哪一个水平线上才刚刚合适。假设 c#和 .net 破坏了程序员世界的明确界限规则,而是很容易被滥用,那么最终我们扔掉的是 c# 和 .net,而不是扔掉我们的编程设计原则。所以 c# 应该会谨慎地设计语言,不会过于激进过于动态。
mirrorspace 2018-02-26
  • 打赏
  • 举报
回复
匿名对象集合弄成ExpandoObject类型的可以到VIEW里使用 .PropName出来.但object类型的不行. 但是发现,如果是一一个方法里写的匿名对象,可以 .PropName出来.如果返回给别的方法用,却不行
  • 打赏
  • 举报
回复
任何东西都有两面性,c# 和 .net 有越来越多的语法糖,那么“过与不及”都会产生bug。不是说不会某种编程语法才会产生bug,实际上“学的太多了”反而更反动。
  • 打赏
  • 举报
回复
举个例子,比如说代码
using System;
using System.Collections.Generic;
using System.Dynamic;

namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {
            dynamic r = x()[0];
            Console.WriteLine(r.b);
            Console.WriteLine("................按任意键结束");
            Console.ReadKey();
        }

        static List<ExpandoObject> x()
        {
            var r = new ExpandoObject();
            dynamic s = r;
            s.a = 1;
            s.b = "2";
            return new List<ExpandoObject> { r };
        }
    }
}
这里在使用时使用 dynamic 完全没有问题,在定义 x 函数时声明 List<ExpandoObject> 也非常正规。 如果声明 x 函数返回为 List<dynamic> 或者 List<object> 那么就应该看成是一个不负责任的设计了。
  • 打赏
  • 举报
回复
接口定义设计时不要乱用 dynamic 语法糖。dynamic 应该是在使用时才用的,作为一个功能方法的定义者,如果你连自己输出的数据的类型都不知道,那又何必要输出一个方法呢? 仅仅看
public static List<dynamic> genChangeOutViewColumn()
这个方法定义,应该作为不合格的定义,作为 bug 来看待。这里应该使用 List<含有具体功能内涵的类型> 作为输出参数声明,而不是随便声明 object 集合。
cy2889792 2018-02-26
  • 打赏
  • 举报
回复
强转就行了,或者不用变体类型
yzf86211861 2018-02-22
  • 打赏
  • 举报
回复
还是 用点 JS的 组件好, 微软的 这种东西 现在 了解的人太少 问谁 都没人 说的清楚.
正怒月神 版主 2018-02-22
  • 打赏
  • 举报
回复
你的情况就是 由于 dynamic包含了2级节点。
正怒月神 版主 2018-02-22
  • 打赏
  • 举报
回复
我没记错的话,dynamic在前台有2种情况。 具体原因看这个:http://blog.csdn.net/hanjun0612/article/details/53389993 里面也有解决方案。 不过创建实体类也是可以的。 但是我记不清,直接把dynamic替换为 var可不可以。楼主可以试一下。
圣殿骑士18 2018-02-21
  • 打赏
  • 举报
回复
当前解决方案,只能是定义POCO类返回。 此时,不论后台方法是用List<object>返回,还是用List<dynamic>返回,或者前台用dynamic item in ... 强转,就都可以了。 所以此问题不是dynamic是否在视图被支持的问题,而是匿名类在视图不被支持的问题。
圣殿骑士18 2018-02-21
  • 打赏
  • 举报
回复
引用 5 楼 thiefx 的回复:
[quote=引用 3 楼 daixf_csdn 的回复:] [quote=引用 1 楼 thiefx 的回复:] 和dynamic没关系吧?应该是你foreach里边,那一行最前边多一个 @ 被解析成创建一个object 但是object不包含label属性
不是 @ 而是 @: ,@:表示这一行是文本,而不是c#源代码。这没问题,必须这么写,否则后面一堆解析不了的特殊字符,比如单引号。[/quote] 学习了,之前没用过这个,那把 foreach里边 的强转一下也不行吗?(RepItemSummaryService.genChangeOutViewColumn() as List<dymamic>) 类似这样?[/quote] 是否强转没有关系。实际上,我定义成foreach(dynamic item in ... 已经是强转了。
圣殿骑士18 2018-02-21
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
dynamic没法绑定,可以用object
试过,后台用List<dynamic>返回和用List<object>返回,没有本质区别。本质上是因为我返回了匿名类型。 问题的原因,在这篇文章中有解释:匿名类型默认访问修饰符为internal http://blog.csdn.net/deboywang/article/details/6627191
thiefx 2018-01-15
  • 打赏
  • 举报
回复
引用 3 楼 daixf_csdn 的回复:
[quote=引用 1 楼 thiefx 的回复:] 和dynamic没关系吧?应该是你foreach里边,那一行最前边多一个 @ 被解析成创建一个object 但是object不包含label属性
不是 @ 而是 @: ,@:表示这一行是文本,而不是c#源代码。这没问题,必须这么写,否则后面一堆解析不了的特殊字符,比如单引号。[/quote] 学习了,之前没用过这个,那把 foreach里边 的强转一下也不行吗?(RepItemSummaryService.genChangeOutViewColumn() as List<dymamic>) 类似这样?
thiefx 2018-01-15
  • 打赏
  • 举报
回复
引用 3 楼 daixf_csdn 的回复:
[quote=引用 1 楼 thiefx 的回复:] 和dynamic没关系吧?应该是你foreach里边,那一行最前边多一个 @ 被解析成创建一个object 但是object不包含label属性
不是 @ 而是 @: ,@:表示这一行是文本,而不是c#源代码。这没问题,必须这么写,否则后面一堆解析不了的特殊字符,比如单引号。[/quote] 学习了,之前没用过这个,那把 foreach里边 的强转一下也不行吗?(RepItemSummaryService.genChangeOutViewColumn() as List<dymamic>) 类似这样?
thiefx 2018-01-14
  • 打赏
  • 举报
回复
和dynamic没关系吧?应该是你foreach里边,那一行最前边多一个 @ 被解析成创建一个object 但是object不包含label属性
圣殿骑士18 2018-01-14
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
dynamic没法绑定,可以用object
因为如图的智能提示,dynamic就是被解析为object的,而object不可能包含我要定义的属性,所以走不通。 如果我没理解错你的意思的话,也就是必须得定义强类型来解决问题了。 强类型是没问题,我后来只能是这么解决:
@foreach (TypeOutVm item in RepItemSummaryService.genChangeOutViewColumn())
                {
                    @:{ label: '@item.Label', name: '@item.Name', width: 100, align: 'left' },
                }
圣殿骑士18 2018-01-14
  • 打赏
  • 举报
回复
引用 1 楼 thiefx 的回复:
和dynamic没关系吧?应该是你foreach里边,那一行最前边多一个 @ 被解析成创建一个object 但是object不包含label属性
不是 @ 而是 @: ,@:表示这一行是文本,而不是c#源代码。这没问题,必须这么写,否则后面一堆解析不了的特殊字符,比如单引号。
threenewbee 2018-01-14
  • 打赏
  • 举报
回复
dynamic没法绑定,可以用object
【1】Asp.Net MVC的特点 分离任务:利于维护,耦合小 可扩展: HtmlHelper扩展,视图引擎扩展, 强大的URL重写(路由)机制: 兼容ASp.Net现有的技术: 开源: 通过把项目分成model|view|controller, 使得复杂项目更加容易维护 没有使用view state和服务器表单控件,可以更方便的控制 应用程序的行为 应用程序通过controller来控制程序请求,可以 提供丰富的url重写 支持测试驱动开发 在团队模式下表现更加出众 关注点分离 高扩展性 更好的可测试性 更好的URL重写 更好的性能 更加零和的HTML代码控制 2009年3月 asp.net mvc1发布,缺失Area等关键技术 2010年3月12日: 强类型的HTML Helper数据验证,自定义模板,Area,异步Controller .Net4的技术:dynamic类型,默认值的方法参数 Why ASP.Net MVC3 asp.net 视图中充斥着<% %> Action过滤器无法,全局 对404 301 等http响应状态,缺乏对应的ActionResult类型 缺乏模型数据验证的直接支持 对依赖注入(DI)控制反转(IoC)支持不过够好 不支持Grid ViewData用起来麻烦 --> 添加Razor视图引擎,支持多视图引擎 全局的Action过滤器 新的ViewBag属性 新的ActionResult类型 Model Validation JSON绑定支持 Dependncy Injection html5 Css3 部分页的输出缓存 htmlHelper的增强 NuGet fires.Add(new HandErrorAttribute()); HttpNotFoundResult404 RedirectResult301\301 HttpStatusCodeResult自定义http状态吗 @{ int i=0; } @Html.Raw(model.Message) 默认都是经过编码输出 @model.Mesage @foreach(var item in items){ @item.Prop } @if(foo) { @Dsad } Hello @Title . @name 输出@符号 @@forr dsa ds 输出无空格或标记位置 ISBN@(isbnBumber) 注释 @* dsad *@ @{ Func<dynamic,object) b= @@item; } @b("dsad ") 单行输出 @:(@sadsaad) 多行输出 @{

dsad dsa dsa dsa

} @:dsada @:dsada2 @{ dsad dsa ddsad } 布局页的预设可布局区域 通过使用@RenderSection在布局页中预设 一些区域,用于在内容页中使用 @RendSection("head",false) 第一个参数是Section的名字 第二个参数是用来设定是否为必填填充的区域 因为这段代码在每个视图开始的时候执行, 我们不需要在任何单个视图文件中显式的设置布局, 除非我们想要覆盖上面的默认值 _ViewStart.cshtml @{ Layout="~/View/Share/_Layout_cshtml" } Browser-get.set----->IIS ---aspnet_iisapi.dll---->Asp.Net --Routing-->Controller------Bll.DAL----->Action ----ViewData--->Model--->View--Response--->Browser Conroller 控制器在Asp,net MVC 中扮演着处理客服端请求的角色 必须实现System,Web.Mvc.MvcIController接口 通常直接继承System,Web,Mvc,Controller类 必须要以Controller结尾 通过不同的Action来处理具体的客服端请求 Action 继承了System.Web.Mvc.Controller类中 所定义的返回值的类型可以兼容ActionResulet的方法 ContentResult EnptyResult FileResult JavaScriptResult JsonResult RedirectResult RedirectToRoutResult ViewResultBase HttpStatusCodeResult public ActionResult Page404() { return HttpNotFound(); }
ASP.NET Core: Cloud-ready, Enterprise Web Application Development by Mugilan T. S. Ragupathi English | 9 Jun. 2017 | ASIN: B072KDVHCS | 1414 Pages | AZW3 | 36.34 MB Create fast, scalable, and high-performance applications with C# and ASP.NET Core About This Book Get first-principle coverage of the latest ASP.NET Core MVC Find out how to bring together the capabilities and features of both Angular 2 and ASP.NET Core Discover common areas you might encounter performance problems with and areas you don't need to worry about Who This Book Is For This book is for developers who want to learn to build web applications using ASP.NET Core, those who want to make a career building web applications using Microsoft technology, and those who are working on other web frameworks and want to learn ASP.NET Core. What You Will Learn Get to know the concepts of ASP.NET MVC Create a Controller with action methods Build a view using several features of the Razor View engine Construct a Model for ASP.NET Core MVC application Find out how the features of ASP.NET Core and Angular 2 perfectly complement each other Handle requests and actions using server-side and client-side Routing Create a Data Model using Entity Framework Core Learn how to use Angular 2 components and master directives Improve performance at the network level and I/O level, and how to optimize the application as a whole Monitor performance as part of Continuous Integration and regression testing In Detail ASP.NET Core is the new, open source, and cross-platform, web-application framework from Microsoft. ASP.NET Core MVC helps you build robust web applications using the Model-View-Controller design. This guide will help you in building applications that can be deployed on non-Windows platforms such as Linux. Starting with an overview of the MVC pattern, you will quickly dive into the aspects that you need to know to get started with ASP.NET. You will learn about the core architecture of model, view, and control. Integrating your application with Bootstrap, validating user input, interacting with databases, and deploying your application are some of the things that you will learn to execute with this fast-paced guide. You will test your knowledge as you build a fully working sample application using the skills you've learned throughout the book. Moving forward, this guide will teach you to combine the impressive capabilities of ASP.NET Core and Angular 2. Not only will you learn how Angular 2 can complement your .NET skills and toolkit, you'll also learn everything you need to build a complete, dynamic single-page application. Find out how to get your data model in place and manage an API, before styling and designing your frontend for an exceptional user experience. You will find out how to optimize your application for SEO, identify and secure vulnerabilities, and how to successfully deploy and maintain your application. From here, you will delve into the latest frameworks and software design patterns to improve your application performance. The course offers premium, highly practical content on the recently released ASP.NET Core, and includes material from the following Packt books: Learning ASP.NET Core MVC Programming, ASP.NET Core and Angular 2, and ASP.NET Core 1.0 High Performance. Style and approach This learning path takes a first-principles approach to help you understand and implement ASP.NET MVC solutions.

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧