如何使用ASP.NET web api在漂亮的HTML中格式化JSON返回值?

时间:2014-02-09 08:55:28

标签: c# asp.net asp.net-mvc json asp.net-web-api

这是我第一次使用MVC Web Api 2,我设法让我的Web应用程序从另一个域上的第二个Web应用程序检索JSON格式所需的数据。

我的API控制器如下所示:

private IQueryable<ArticleDTO> MapArticles()
{
    return from p in db.Articles.Include("Tags")
           select new ArticleDTO() {    
           ArticleID=p.ArticleID,
           Title = p.Title,
           Subheading = p.Subheading,
           DatePublished = p.DatePublished,
           Body = p.Body,
           Tags = Tags.Select(t => new TagDTO {
               Name = t.Name
           })
};
}

public IEnumerable<ArticleDTO> GetArticles()
{
    return MapArticles().AsEnumerable();
}

我的客户端端点看起来像这样(主要用于测试):

$(document).ready(function () {
    // Send an AJAX request
    $.getJSON(uri)
        .done(function (data) {

            $.each(data, function (key, item) {

                $('<li>', { text: formatItem(item) }).appendTo($('#articles'));
            });
        });
});

function formatItem(item) {
    return item.Title;
}

我的问题是我正在尝试在CSS / html中格式化生成的JSON - 如果我直接从数据库获取数据,而不是通过API,Razor视图看起来像这样:

<div class="col-md-8">
    <h3>
        @Html.ActionLink(@item.Title, "ArticlesDetail", "Home", new { id = item.ArticleID }, null)
    </h3>
    <span class="sidebardate">@item.Date.ToLongDateString()</span><br />
    @if (item.Tags != null && item.Tags.Count > 0)
    {
        <span class="sidebarabstract ArticleTags">
            <strong>Tags:</strong>
            @Html.Raw(string.Join(", ", from category in item.Tags select string.Format("<span><a href='/Article/Category/{0}'>{1}</a></span>", category.Name, category.Name)))
        </span>
    }
    <div class="Articlesbodytext">
        <p>@item.Abstract </p>
    </div>
</div>

如何格式化我的JSON结果以匹配此格式?我是否会走错路,我是否应该在API调用中使用RSS源?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

首先,您不会遇到Web API。 其次,使用Fiddler (get it from here)并检查您的Web API响应。 根据您将找到的内容调整您的WebAPI或Javascript。

答案 1 :(得分:0)

NewtonsoftJSON

我的成绩不错

另外,请注意,当您致电$.each(...)时,回调参数会从$("#id").each(...)

转回
$.each takes a function (element, key) { }

$("...").each takes a function (key, element) { }
这引起了一些麻烦。