ASP.Net MVC如何在View中使用匿名類

有如鵬網(wǎng)友問:

? ? 我關(guān)注了如鵬網(wǎng)N多年跺涤,如鵬網(wǎng)的教學(xué)理念和方法非常對我的學(xué)習(xí)方法,相信也對很多人的學(xué)習(xí)方法监透。我是很佩服如鵬網(wǎng)的桶错。

? ? 不多說了,直接說問題吧胀蛮,這個問題困擾我了N多年了沒解決院刁,突然想到是否可以冒昧問一下:

? ? 問題就是:“前臺如何遍歷匿名類集合”绒净?

就是使用.net 的MVC時秒梅,后臺Action里為了減少查詢數(shù)據(jù)慨蓝,經(jīng)常會使用投影select:

var list= dbContent.Userinfo.select(u=>new {u.Id,U.Name}).ToList();

ViewBag.List=list;

這樣的話庆揩,前臺就無法@foreach(var item in ViewBag.List){//? 在這里使用Table的tr和td循環(huán)}疾瓮,會報錯的俺祠。

除非你在Model層再建一個類來接收瓦堵,這樣的話困鸥,一張表嗅蔬,我在不同的地方使用,稍微增減字段顯示疾就,就得再建一個類澜术,

而且經(jīng)常.join()方法,也得再建類虐译,這很惡心的瘪板。

我百度了N年,也沒答案漆诽。

網(wǎng)上搜索到一些辦法侮攀,如傳Json(缺點是JS里會出現(xiàn)一大堆Json字符串,顯示時又會顯示一大堆厢拭,浪費流量)

轉(zhuǎn)DataTable兰英,(這種方法不應(yīng)該出現(xiàn),從List轉(zhuǎn)成DataTable總覺得不是一個好辦法)

我相信供鸠,肯定有一個好辦法畦贸,只是我不知道,冒昧問如鵬網(wǎng)知道有什么好辦法嗎?

祝如鵬網(wǎng)新年愉快薄坏,學(xué)校越辦越好趋厉,越辦越流行,跨越七大洲八大洋胶坠,我從內(nèi)心里希望如鵬網(wǎng)的教育理念推廣開來君账,如此“用心”的教育機構(gòu)除了如鵬網(wǎng)的現(xiàn)在幾乎就沒有了。

如鵬網(wǎng)老師的回答:

使用C#中的動態(tài)類型dynamic沈善,把匿名類轉(zhuǎn)換為dynamic傳遞給View乡数,上代碼。

1闻牡、首先編寫一個重要的方法ToExpandoObject:

/// <summary>

/// 把普通對象(一般是匿名對象)轉(zhuǎn)換為dynamic對象净赴,支持關(guān)聯(lián)對象

/// 如果把這個方法放到了一個類庫項目中,則需要使用[assembly: InternalsVisibleTo("xxx")]把被轉(zhuǎn)換的類所在的程序集設(shè)置為對類庫項目程序集可見

/// </summary>

/// <param name="obj"></param>

/// <returns></returns>

public static dynamic ToExpandoObject(object obj)

{

if(obj==null)

{

return null;

}

//處理集合類型罩润,注意這里把集合類型統(tǒng)一轉(zhuǎn)換為List玖翅,因此View中不要再使用數(shù)據(jù)的原始集合類型

if (typeof(IEnumerable).IsAssignableFrom(obj.GetType()))

{

List list = new List();

foreach(var item in (IEnumerable)obj)

{

list.Add(ToExpandoObject(item));

}

return list;

}

IDictionary expando = new ExpandoObject();

foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(obj.GetType()))

{

object value = property.GetValue(obj);

if(value==null)

{

expando.Add(property.Name, null);

}

else if(value.GetType().IsValueType||value.GetType()==typeof(string))

{

expando.Add(property.Name, value);

}

//如果不是基本數(shù)據(jù)類型或者string,則就是p.dog這樣的關(guān)聯(lián)對象類型割以,進行遞歸處理

else

{

expando.Add(property.Name, ToExpandoObject(value));

}

}

return (ExpandoObject)expando;

}

2烧栋、然后Action中這樣寫:

public ActionResult Index()

{

ViewBag.p = ToExpandoObject(new { name="如鵬",dog=new { name="狗狗",age=3} ,

cats= new List() { new { name = "mimi", age = 2 }, new { name = "miaomiao", age = 66 } }

});

ViewBag.dogs = ToExpandoObject(new List() { new { name = "京巴", age = 13 } , new { name = "藏獒", age =12 } });

return View();

}

通過ToExpandoObject方法把匿名類對象轉(zhuǎn)換為dynamic對象

3、在View中:

@{?

? ? dynamic p = ViewBag.p;

? ? dynamic dogs = ViewBag.dogs;

}

@p.name<br/>

@p.dog.age<br/>

@p.dog.name<br/>

p.cats:<br/>

<ul>

? ? @foreach(dynamic c in p.cats)

? ? {

? ? ? ? <li>@c.name @c.age</li>

? ? }? ??

</ul>

dogs:<br/>

<ul>

? ? @foreach (dynamic d in dogs)

? ? {

? ? ? ? <li>@d.name @d.age</li>

? ? }

</ul>

執(zhí)行效果:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拳球,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子珍特,更是在濱河造成了極大的恐慌祝峻,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扎筒,死亡現(xiàn)場離奇詭異莱找,居然都是意外死亡,警方通過查閱死者的電腦和手機嗜桌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門奥溺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人骨宠,你說我怎么就攤上這事浮定。” “怎么了层亿?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵桦卒,是天一觀的道長。 經(jīng)常有香客問我匿又,道長方灾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮裕偿,結(jié)果婚禮上洞慎,老公的妹妹穿的比我還像新娘。我一直安慰自己嘿棘,他們只是感情好劲腿,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔫巩,像睡著了一般谆棱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上圆仔,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天垃瞧,我揣著相機與錄音,去河邊找鬼坪郭。 笑死个从,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的歪沃。 我是一名探鬼主播嗦锐,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沪曙!你這毒婦竟也來了奕污?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤液走,失蹤者是張志新(化名)和其女友劉穎碳默,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缘眶,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嘱根,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了巷懈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片该抒。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖顶燕,靈堂內(nèi)的尸體忽然破棺而出凑保,到底是詐尸還是另有隱情,我是刑警寧澤割岛,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布愉适,位于F島的核電站,受9級特大地震影響癣漆,放射性物質(zhì)發(fā)生泄漏维咸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望癌蓖。 院中可真熱鬧瞬哼,春花似錦、人聲如沸租副。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽用僧。三九已至结胀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間责循,已是汗流浹背糟港。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留院仿,地道東北人秸抚。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像歹垫,于是被迫代替她去往敵國和親剥汤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,448評論 0 13
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,308評論 0 10
  • 1 除了知識的掌握排惨,我覺得二者的區(qū)別更多的應(yīng)該體現(xiàn)在個人素質(zhì)和修養(yǎng)吭敢、對新生事務(wù)的接受能力,對自我的正確認知暮芭,以及待...
    騷里騷氣小可愛閱讀 433評論 0 1
  • 周末正逢大雪飄飛谴麦,大家心中回家的信念堅定,所以即使不能開車伸头,也會想各種辦法回去匾效,或步行,或搭公交恤磷。 周末帶孩子上課...
    笑笑8閱讀 341評論 0 1
  • 看過了許許多多關(guān)于人生思考的小視頻面哼,泰國的公益廣告-無名英雄卻是唯一令我每每感動的,看到最后扫步,那一個個鮮活的動人的...
    簡芝靈閱讀 2,167評論 0 2