Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Viewbag RuntimeBinderException:&x27;对象';不包含定义_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# Viewbag RuntimeBinderException:&x27;对象';不包含定义

C# Viewbag RuntimeBinderException:&x27;对象';不包含定义,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,如何通过ViewBag将数据传递给视图来解决此错误 System.Core.dll中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常,但未在用户代码中处理 其他信息:“对象”不包含“名称”的定义 内部控制器 var linq = (from c in db.Catogeries join a in db.Articals on c.Id equals a.CatogeryId

如何通过
ViewBag
将数据传递给视图来解决此错误

System.Core.dll中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常,但未在用户代码中处理

其他信息:“对象”不包含“名称”的定义

内部控制器

var linq = (from c in db.Catogeries
            join a in db.Articals on c.Id equals a.CatogeryId
            select new  {name=c.Name,title=a.Title });
ViewBag.data = linq;
       
鉴于

@{         
     foreach (var item in ViewBag.data )
     {
          <p>@item.name</p>
     }
}
@{
foreach(ViewBag.data中的var项)
{
@item.name

} }
您只需将其强制转换即可。视图不知道对象是什么类型的,所以在您强制转换它之前,尝试枚举它是不起作用的。比如:

foreach (var item in (IEnumerable <dynamic>) ViewBag.data) { ... }
foreach(在(IEnumerable)ViewBag.data中的变量项){…}
抱歉,如果格式稍微关闭,请尝试在电话上执行此操作

修复此错误的最简单方法是创建类,而不是使用匿名对象和强类型模型

var linq = (from c in db.Catogeries
        join a in db.Articals on c.Id equals a.CatogeryId
        select new MyCategory { name=c.Name, title=a.Title });

ViewBag.data = linq;
视图中

foreach (var item in (IEnumerable<MyCategory>)ViewBag.data )
{
     <p>@item.name</p>
}
foreach(IEnumerable)ViewBag.data中的变量项)
{
@item.name

}
如果您坚持使用
dynamic
,您可以查看以下问题:


问题实际上是由设置
Viewbag
值引起的。在这个过程中,.NET总是抛出一个内部异常,然后VisualStudio进入调试器

解决方案:仅针对您自己代码中的异常使Visual Studio中断。
转到“工具/选项”菜单,选择左侧的“调试”,并选中“仅启用我的代码”选项。

以下是我解决问题的方法,希望如此 可以帮助某人:

我创建了一个类:

    public class MyClass
    {
        public decimal EmployeeId { get; set; }
        public string CategoryCode { get; set; }
        public string CategoryDesc { get; set; }
    }
}
在控制器处:

var query = (from c in context.EmployeeCategory
             where(c.EMPLOYEE_ID == 22)
             join a in context.Categories on c.Category_CODE 
             equals a.Category_CODE
             select new MyClass
                         {
                             EmployeeId = c.EMPLOYEE_ID,
                             CategoryCode = a.Category_CODE,
                             CategoryDesc = a.Category_DESC
                         });
return View(query);
鉴于:

@model IEnumerable<MyClass>

@foreach (var item in Model)
{
            @item.EmployeeId <b> - </b>
            @item.CategoryCode <br />
            @item.CategoryDesc <br />
}
@model IEnumerable
@foreach(模型中的var项目)
{
@item.EmployeeId-
@item.CategoryCode
@item.CategoryDesc
}
您可以尝试使用自定义类而不是匿名类
newcategoryModel{name=c.name,title=a.title}
停止使用ViewBag传递模型。使用模型传递信息。是的,创建视图模型类是一个解决方案,也是一个公认的答案,它帮助了我。不,它对我不起作用。为了解决这个问题,我使用类工作表DTO将对象数据“ViewBag data”转换为像“foreach(IEnumerable)ViewBag.subCategories中的var项)”这样的强类型。