我收到以下错误:
'object'不包含'RatingName'的定义
当您查看匿名动态类型时,它显然具有RatingName.

我意识到我可以用元组做到这一点,但我想理解为什么会出现错误信息.
我需要在ASP.NET MVC应用程序中显示确认数据库更新成功的消息.目前,应用程序仅在发生错误时显示消息(使用ValidationSummary助手).在成功操作时,应用程序当前重定向到导航中的合适点.
目标是:
我的偏好是提交按钮附近的某种工具提示类型的消息显示,然后是一个删除消息并在成功后继续现有重定向的机制.
这似乎表明Ajax调用而不是现有的HTTP POST来提交表单.我该怎么做?
我从各种其他相关问题,了解这里,并在这里等等,因为匿名类型与内部访问定义你不能从控制器通过匿名类型对象的视图.View和Controller代码被编译到不同的程序集中,因此尝试使用它会导致此错误...
对象不包含'foo'的定义
这很好,我可以接受,虽然起初很烦人.有足够的建议解决方法来安抚我.
但是,我认为你仍然可以将匿名类型从视图传递到局部视图,因为它们都是视图,它们将在同一个程序集中编译.
Razor查看代码......
@Html.Partial("Partial1", new { foo = "Something", bar = "Something else" })
Run Code Online (Sandbox Code Playgroud)
和"Partial1"的局部视图代码
@model dynamic
<h1>@Model.foo</h1>
<span>@Model.bar</span>
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这个WAS在一个新的MVC项目的开发开始工作,但是当我添加了更多的视图时它就停止了工作,现在我给出了与上面提到的相同的错误.
就好像我已达到一个阈值,在该阈值中视图和局部视图不再编译到同一个程序集中.但我只是在猜测.
我想知道是否有人可以解释这一点.
不重复: MVC Razor动态模型,'object'不包含'PropertyName'的定义
根据那里的答案,
根据David Ebbo的说法,您无法将匿名类型传递给动态类型视图,因为匿名类型被编译为内部类型.由于CSHTML视图被编译为单独的程序集,因此无法访问匿名类型的属性.
为什么下面的代码 - 据说应该永远不会工作 - 按照我预期的部分视图位于"/Home/_Partial.cshtml"时工作,但在移动到"/Shared/_Partial.cshtml"时突然停止工作?
使用ASP.NET 4.5(和以前的版本),下面生成文本"Hello,World!" 到网络浏览器:
〜/控制器/ HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace TestDynamicModel.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
Run Code Online (Sandbox Code Playgroud)
〜/浏览/首页/ Index.cshtml
@Html.Partial("_Partial", new { Text = "Hello, world!", ShouldRender = true } )
Run Code Online (Sandbox Code Playgroud)
〜/浏览/首页/ _Partial.cshtml
@model dynamic
@if (!Model.ShouldRender)
{
<p>Nothing to see here!</p>
}
else
{
<p>@Model.Text</p>
}
Run Code Online (Sandbox Code Playgroud)
但是,当_Partial.cshtml转移到〜/ Views/Shared/_Partial.cshtml时,_Partial.cshtml(第2行)中会抛出以下错误:
'object' does not contain …Run Code Online (Sandbox Code Playgroud) 我有一个Contact对象列表,我只想要一个属性的子集.所以我使用LINQ投影来创建一个匿名列表,然后将其传递给局部视图.但是当我在局部视图中使用该列表时,编译器说它没有那些属性.我尝试了最简单的情况如下,但我仍然没有机会在局部视图中使用匿名对象或列表.
var model = new { FirstName = "Saeed", LastName = "Neamati" };
return PartialView(model);
Run Code Online (Sandbox Code Playgroud)
在局部视图中,我有:
<h1>Your name is @Model.FirstName @Model.LastName<h1>
Run Code Online (Sandbox Code Playgroud)
但它说@Model没有FirstName和LastName属性.这有什么不对?当我使用@Model时,此字符串将在浏览器中呈现:
{ Title = "Saeed" }
Run Code Online (Sandbox Code Playgroud) asp.net-mvc anonymous-types viewmodel partialviews asp.net-mvc-3
这是我的控制器代码:
IQueryable<Foo> foos = dbContext.Foos.Where(...);
return View(foos);
Run Code Online (Sandbox Code Playgroud)
这个剃刀代码(cshtml)效果很好:
@model IQueryable<Foo>
@{
IQueryable<Foo> foos = Model;
var projected = foos.Select(e => new
{
fooId = e.FooId,
bar = new
{
barId = e.Foo.BarId
}
}).ToList();
}
@foreach (var x in projected)
{
<span>@x.fooId</span><br />
}
Run Code Online (Sandbox Code Playgroud)
但这个剃刀代码(cshtml)不起作用,几乎是一样的东西!:
@model IQueryable<Foo>
@{
IQueryable<Foo> foos = Model;
var projected = foos.Selected(Foo.Projection()).ToList()
}
@foreach (var x in projected)
{
<span>@x.fooId</span><br />
}
Run Code Online (Sandbox Code Playgroud)
Foo.Projection() 是一个静态方法,我重用了很多:
public static Expression<Func<Foo, dynamic>> Projection()
{
return e => new …Run Code Online (Sandbox Code Playgroud)