/ / ASP.NET MVC देखें अनाम वर्ग की सूची में अनाम वर्ग की गणना पर त्रुटि () विधि - c #, asp.net-mvc, asp.net-mvc-4, रेजर, अनाम-प्रकार

अज्ञात वर्ग की एएसपी.नेट एमवीसी व्यूबैग सूची गिनती () विधि पर त्रुटि फेंकता है - सी #, asp.net-mvc, asp.net-mvc-4, razor, अनाम-प्रकार

मेरे पास एक सर्वरसाइड कोड है जहां मैं डेटाबेस से अनाम वर्ग की सूची लौटा रहा हूं:

    public ActionResult DisplayMap()
{
ViewBag.Checkins = (from locationUpdate in db.LocationUpdates
select new
{
locationUpdate,
locationUpdate.User
}).ToList();
return View();
}

रेज़र पृष्ठ पर, मैं इस सूची की गिनती प्राप्त करना चाहता हूं:

@if (ViewBag.Checkins.Count() > 0)
{ ... }

हालाँकि, यह एक त्रुटि फेंकता है:

An exception of type "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException" occurred
in System.Core.dll but was not handled in user code.

Additional information: "object" does not contain a definition for "Count"

जब मैं टाइप करता हूं ViewBag.Checkins तत्काल विंडो में, मुझे मिलता है:

ViewBag.Checkins
{System.Collections.Generic.List<<>f__AnonymousType6<MY_APP.LocationUpdate,MY_APP.User>>}
[0]: { locationUpdate = {System.Data.Entity.DynamicProxies.LocationUpdate_4532566693B61EF657DDFF4186F1D6802EA1AC8D5267ED245EB95FEDC596E129}, User = {System.Data.Entity.DynamicProxies.User_816C8A417B45FE8609CD1F0076A5E6ECBAB0F309D83D2F8A7119044B1C6060CF} }

The Checkins वस्तु वास्तव में एक List, और डेटा सही है । मैं "ve की कोशिश की Count, Length भी (विधि कॉल के बिना, बस गुण के रूप में), लेकिन कोई भाग्य ।मैं गलत क्या कर रहा हूं?

उत्तर:

उत्तर № 1 के लिए 17

ViewBag है dynamic, जबकि Count है एक विस्तार विधि, जो isn "टी गतिशील रूप से समर्थित (यह बाध्य होना है compile समय)।

आप या तो डाल सकते है एक IEnumerable<dynamic>, या स्थैतिक विधि का सीधे उपयोग करें:

@if (((IEnumerable<dynamic>)ViewBag.Checkins).Count() > 0)

या

@if (Enumerable.Count(ViewBag.Checkins) > 0)

या एक मजबूती से टाइप मॉडल बनाने के साथ एक Checkins संपत्ति और बचो ViewBag कुल मिलाकर।

संपादित करें

जब से तुम "फिर से सिर्फ अगर गिनती 0 से अधिक है जांच करना चाहते हैं, Any अधिक उपयुक्त है (और कुछ संसाधन समय परिदृश्य के आधार पर सहेज सकते हैं):

@if (Enumerable.Any(ViewBag.Checkins))

उत्तर № 2 के लिए 1

viewbag गतिशील है जो इसे एक गुमनाम आंतरिक रूप में उत्पंन प्रकार बनाते हैं ।यह बेहतर है कि आप दृश्य मॉडलों के बजाय का उपयोग करें ।

और फिर अपने मॉडल के साथ दृश्य कॉल, कुछ इस तरह करते हैं:

public class MyViewModel{
LocationUpdate LocationUpadte{get;set;}
User User{get;set;}
}

public ActionResult DisplayMap()
{
var model = (from locationUpdate in db.LocationUpdates
select new MyViewModel
{
locationUpdate,
locationUpdate.User
}).ToList();
return View(model);
}

फिर में तुम्हे उस्तरा देखने

@Model.Count() अपेक्षित मान वापस होगा


जवाब के लिए 0 № 3

आप अपने वस्तु कास्ट के बाद से viewbag गतिशील है की जरूरत है ।उदाहरण के लिए:

var list = ViewBag.List as List<int>();
list.Count();

उत्तर के लिए -3 № 4

तुम यह केर सकते हो:

- @if(ViewBag.Checkins.Count > 0)