0

私は非常に奇妙に思える問題に苦しんでいます。

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'

モデルにプロパティがあるにもかかわらず、エラーが発生する理由がわかりません。

4

2 に答える 2

1

これを行うためのより良い方法があると確信していますが、現状を維持したい場合は、ビュー ページのコードを次のように変更します。

@model dynamic
@{
    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 p in blog.PhotosCollection)
            {
                var photos = p.GetType().GetProperty("Photos").GetValue(p, null);
                foreach (var photo in photos)
                {
                    var url = photo.GetType().GetProperty("Url").GetValue(photo, null);
                    var width = photo.GetType().GetProperty("Width").GetValue(photo, null);
                    var height = photo.GetType().GetProperty("Height").GetValue(photo, null);

                    <img src="@url" width="@width" height="@height"/>
                }
            }
            <hr />
        </li>
    }
</ol>
于 2013-10-28T01:00:15.967 に答える