0

私は私のかみそりのビューにこれを渡します:

public ActionResult NewsList()
{
  ViewBag.News = _client.GetNews(Guid.Parse(GetCookieInfo.TokenId));
  return View();
}

そして私のGetNewsはこれです:

public IEnumerable<TokenNews> GetNews(Guid tokenid)
{
  var nl = from news in entities.News
         where news.TokenId == tokenid &&
               DateTime.Now > news.Expiration &&
               news.IsActive
         orderby news.OrderNumber
         select new News
                  {
                    NewsTitle = news.NewsTitle,
                    NewsBody = news.NewsBody,
                    OrderNumber = news.OrderNumber
                  };

  var newslist = new List<TokenNews>();
  foreach (var news in nl)
  {
    var nw = new TokenNews();
    nw.Body = news.NewsBody;
    nw.Title = news.NewsTitle;
    newslist.Add(nw);
  }
  return newslist;
}

そして私のTokenNewsはこれです:

  [DataContract]
  public class TokenNews
  {
    private string title = string.Empty;
    private string body = string.Empty;

    public string Title {
      get { return title; }
      set { title = value; }
    }
    public string Body
    {
      get { return body; }
      set { body = value; }
    }
  }

私のNewsList.cshtmlビューは次のようになります。

@using SuburbanCustPortal.SuburbanService

<br />

         @foreach (var nws in (IEnumerable<TokenNews>) ViewBag.News)
         {

           <div  class="leftdiv">
             <br/>
             <label class="sizedCustomerlabel">
               @nws.Body
             </label>
           </div>
         }

私の問題は@nws.Bodyです。nwsは、TokenNewsのタイトルまたは本文を教えてくれません。

それは私にメッセージを与えています:

シンボル本体を解決できません。

これは私が何百回も見落としているものでなければなりませんが、私はそれを理解することができません。

助言がありますか?

アップデート

Umar Farooq Khawajaへの返答:

あなたが示したように私はしました、そしてこれは起こったことです:

ここに画像の説明を入力してください

4

1 に答える 1

1

パブリックプロパティのクラスにDataMember属性を適用する必要があります。その後、クラスを使用するサービスTokenNewsのクライアントを再生成することを忘れないでください。また、コードを少しすっきりさせるために、プライベートフィールドに裏打ちされたプロパティではなく、自動生成されたプロパティを使用しました。SuburbanCustPortal.SuburbanServiceTokenNews

[DataContract]
public class TokenNews
{
    [DataMember]
    public string Title
    {
        get;
        set;
    }

    [DataMember]
    public string Body
    {
        get;
        set;
    }
}

これが機能しない場合は、最初ViewBag.Newsに静的に型指定された変数に格納してから、新しい静的に型指定された参照を使用してそれを反復処理してみてください。

<br />
@{
    var news = (IEnumerable<TokenNews>)ViewBag.News;
}
@foreach (var item in news)
{
<div class="leftdiv">
    <br />
    <label class="sizedCustomerLabel">
        @item.Body
    </label>
</div>
}

また、次の方法でリファクタリングすることもできます。

public IEnumerable<TokenNews> GetNews(Guid tokenid)
{
    var newslist = from news in entities.News
                   where news.TokenId == tokenid &&
                         DateTime.Now > news.Expiration &&
                         news.IsActive
                   orderby news.OrderNumber
                   select new TokenNews
                   {
                       Title = news.NewsTitle,
                       Body = news.NewsBody
                   };

    return newslist.ToArray();
}
于 2012-12-30T17:42:54.087 に答える