簡體   English   中英

部分視圖位於共享文件夾中時,ASP.NET MVC“@model dynamic”無法識別模型屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM