Я борюсь с проблемой, которая кажется очень странной.
1) У меня есть класс с именем «Tumblr»:
public class Tumblr
{
public string BlogName { get; set; }
public dynamic PhotosCollection { get; set; }
}
2) У меня есть метод в моем контроллере:
public ActionResult Index()
{
var model = new List<Tumblr>();
var client = new HttpClient();
var task = client.GetAsync("http://api.tumblr.com/v2/blog/puppygifs.tumblr.com/posts/photo?api_key=SbvxQcWuuNr1mfRvILKKTqiztMGvR8hbGPBDA9PlMidrYdd8Ik")
.ContinueWith((taskWithMsg) =>
{
var response = taskWithMsg.Result;
var jsonTask = response.Content.ReadAsAsync<JObject>();
jsonTask.Wait();
var jsonResponse = jsonTask.Result;
model = FillModel(jsonResponse, model)
});
task.Wait();
return View(model);
}
private List<Tumblr> FillModel(dynamic jsonObject, List<Tumblr> model)
{
var postObject = (JArray)jsonObject["response"].posts;
var posts = postObject.Select(e => new Tumblr()
{
BlogName = e["blog_name"].ToString(),
PhotosCollection = e["photos"].Select(o => new
{
Photos = o["alt_sizes"].Select(s => new
{
Width = s["width"].ToString(),
Height = s["width"].ToString(),
Url = s["width"].ToString(),
})
})
});
model.AddRange(posts);
return model;
}
И вот мой взгляд:
@using System.Collections
@{
ViewBag.Title = "Home Page";
}
<ol class="round">
@foreach (dynamic blog in Model)
{
<li class="one">
<h5>@blog.BlogName</h5>
<span>@blog.PhotosCollection</span>
<hr />
<hr />
<hr />
@foreach (dynamic photos in blog.PhotosCollection)
{
foreach (var photo in photos.Photos)
{
<img src="@photo.Url" width="@photo.Width" height="@photo.Height"/>
}
}
<hr />
</li>
}
</ol>
При попытке запустить выдает ошибку:
'object' does not contain a definition for 'Photos'
Я не понимаю, почему он выдает ошибку, хотя у меня есть свойство в моей модели.
dynamic
везде и не используете@model List<Tumblr>
в верхней части кода Razor? Кроме того, знаете ли вы, что упомянули свойство какPhots
? - person Adrian Wragg   schedule 28.10.2013