12

次の複製ではありません: MVC Razor 動的モデル、'object' には 'PropertyName' の定義が含まれていません

そこでの回答によると、

David Ebbo によると、匿名型は内部としてコンパイルされるため、匿名型を動的に型指定されたビューに渡すことはできません。CSHTML ビューは別のアセンブリにコンパイルされるため、匿名型のプロパティにアクセスできません。

部分ビューが "/Home/_Partial.cshtml" にあるときに期待どおりに動作するはずの以下のコードが、"/Shared/_Partial.cshtml" に移動すると突然動作しなくなるのはなぜですか?

ASP.NET 4.5 (および以前のバージョン) を使用すると、次のようにテキスト "Hello, World!" が生成されます。ウェブブラウザに:

~/Controllers/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();
        }
    }
}

~/Views/Home/Index.cshtml

@Html.Partial("_Partial", new { Text = "Hello, world!", ShouldRender = true } )

~/Views/Home/_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 { Text = Hello, world!, ShouldRender = True }
4

3 に答える 3

1

質問は ASP.NET MVC の動作に関するものであり、私は回避策を知っていますが、全員が知っているわけではありません。コードを機能させたいだけの人のための回避策を次に示します。 Razor の動的匿名型が RuntimeBinderException を引き起こす

于 2013-09-24T16:21:54.393 に答える
-5

型を使用するには、アセンブリdynamicを参照する必要があります。Microsoft.CSharpプロジェクトの参照を確認してください。

于 2014-04-10T08:33:49.863 に答える