第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ASP.NET MVC - 將動態(tài) ExpandoObject 從控制器傳遞到視圖時出現(xiàn)

ASP.NET MVC - 將動態(tài) ExpandoObject 從控制器傳遞到視圖時出現(xiàn)

C#
郎朗坤 2022-12-24 10:16:03
由于不可能將多個模型傳遞給 ASP.NET MVC 4 中的視圖,我試圖將各種模型填充到一個動態(tài)模型中ExpandoObject,然后從視圖中將其解包。我的模型(不僅僅包含這個類,但為了簡潔起見,我只展示這個):public class Modular_ArtistModel{    public string Artist_Name { get; set; }}我的控制器:( 我不僅僅是將這個List<>對象打包到dynamic對象中,但為了簡潔起見......)dynamic ArtistModel = new ExpandoObject();        var Modular_ArtistModel = LoadSP_Modular_ArtistModel("sp_Mod_Artist_Artist", i);        List<Modular_ArtistModel> mod_ArtistModel = new List<Modular_ArtistModel>();        foreach (var row in Modular_ArtistModel)        {            mod_ArtistModel.Add(new Modular_ArtistModel            {                Artist_Name = row.Artist_Name            });        }        ArtistModel.Artist = mod_ArtistModel;我的觀點(diǎn):( 這是視圖中的第一件事,程序因以下任務(wù)而窒息)@model dynamic@{string artist_Name = Model.Artist.Artist_Name;}當(dāng)光標(biāo)到達(dá)View層上面的assignment時,拋出如下異常:'Model.Artist.Artist_Name' threw an exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'Data: {System.Collections.ListDictionaryInternal}HResult: -2146233088HelpLink: nullInnerException: nullMessage: "'System.Collections.Generic.List<....Models.Modular_ArtistModel>' does not contain a definition for 'Artist_Name'"Source: "Anonymously Hosted DynamicMethods Assembly"StackTrace: "   at CallSite.Target(Closure , CallSite , Object )\r\n   at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)"TargetSite: {System.Object CallSite.Target(System.Runtime.CompilerServices.Closure, System.Runtime.CompilerServices.CallSite, System.Object)}有誰知道我需要做什么來解決這個問題?不確定這是快速修復(fù)還是更廣泛的重新設(shè)計(jì)。
查看完整描述

2 回答

?
隔江千里

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個贊

我認(rèn)為使用動態(tài)對象不是一個好主意,默認(rèn)情況下視圖是強(qiáng)類型的,沒有模型就無法創(chuàng)建基于屬性的模型驗(yàn)證......


通過參考官方文檔和其他資源,您可以使用擴(kuò)展方法將對象轉(zhuǎn)換為 ExpandoObject 并且您的函數(shù)應(yīng)該可以工作:


擴(kuò)展方法:


public static ExpandoObject ToExpando(this object anonymousObject)

{

    IDictionary<string, object> anonymousDictionary =  new RouteValueDictionary(anonymousObject);

    IDictionary<string, object> expando = new ExpandoObject();

    foreach (var item in anonymousDictionary)

        expando.Add(item);

    return (ExpandoObject)expando;

}

在您的控制器方法的返回中嘗試添加:


return ( "yourView", ArtistModel.ToExpando() ); 

解釋:


這樣做的原因是匿名類型在內(nèi)部傳遞給控制器,因此只能從聲明它的程序集中訪問它。由于視圖是單獨(dú)編譯的,因此動態(tài)綁定器抱怨它無法越過該程序集邊界。


但是如果你仔細(xì)想想,動態(tài)綁定器的這種限制實(shí)際上是人為的,因?yàn)槿绻闶褂盟接蟹瓷?,沒有什么可以阻止你訪問那些內(nèi)部成員(是的,它甚至可以在中等信任中工作)。因此,默認(rèn)的動態(tài)綁定器正在竭盡全力執(zhí)行 C# 編譯規(guī)則(您無法訪問內(nèi)部成員),而不是讓您執(zhí)行 CLR 運(yùn)行時允許的操作。


查看完整回答
反對 回復(fù) 2022-12-24
?
侃侃爾雅

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個贊

您發(fā)送列表藝術(shù)家但嘗試獲得一位藝術(shù)家您應(yīng)該更改此

string artist_Name = Model.Artist.Artist_Name;

string artist_Name= Model.Artist.FirstOrDefault().Artist_Name;

要么

改變

@model dynamic

@model ExpendoObject


查看完整回答
反對 回復(fù) 2022-12-24
  • 2 回答
  • 0 關(guān)注
  • 108 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號