0

我正在传递给我的 Razor 视图:

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 视图如下所示:

@使用 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.SuburbanService使用TokenNews该类的服务重新生成客户端。我还使用了自动生成的属性,而不是私有字段支持的属性,只是为了让代码更简洁。

[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 回答