![](/img/trans.png)
[英]ASP.NET MVC: Binding dynamically rendered partial views as nested properties of the view model
[英]ASP.NET MVC '@model dynamic' not recognizing Model properties when partial view is in Shared folder
不重復: 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();
}
}
}
〜/瀏覽/首頁/ Index.cshtml
@Html.Partial("_Partial", new { Text = "Hello, world!", ShouldRender = true } )
〜/瀏覽/首頁/ _Partial.cshtml
@model dynamic
@if (!Model.ShouldRender)
{
<p>Nothing to see here!</p>
}
else
{
<p>@Model.Text</p>
}
但是,當_Partial.cshtml轉移到〜/ Views / Shared / _Partial.cshtml時,_Partial.cshtml(第2行)中會拋出以下錯誤:
'object' does not contain a definition for 'ShouldRender'
在調試器中檢查Model時,我發現以下屬性:
Model { Text = Hello, world!, ShouldRender = True }
雖然這個問題與ASP.NET MVC的行為有關,而且我知道解決方法,但我不確定每個人都是。 對於只想讓代碼工作的人來說,這是一種解決方法: Razor中的動態匿名類型導致RuntimeBinderException
我找到了這個答案: https : //stackoverflow.com/a/21633464/605067是我的錯誤的解決方案,它與你的症狀有着相同的症狀。 錯誤消息是:
'object' does not contain a definition for 'property'
這是因為你以同樣的方式將一個匿名對象傳遞給{{@ Html.Partial}}。
如該回答說,這是完全有效的匿名對象傳遞到局部視圖,以及這些觀點並不需要包括{{@model動態}} -實際上,你創造一些不必要的開銷,如果您使用的是動態模型。
真正的問題是這個錯誤信息是誤導性的 ,至少在我的情況下。 問題是我在同一目錄中有其他視圖文件沒有正確編譯,它似乎拋出了視圖編譯器。 在其他SO帖子中提供的修復工作,即設置* .csproj屬性
<MvcBuildViews>true</MvcBuildViews>
為true,然后修復我的視圖中的所有編譯錯誤。 修復它們之后,我能夠在局部視圖中綁定到匿名對象。
要使用dynamic
類型,您需要引用Microsoft.CSharp
程序集。 檢查項目的參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.