我的api控制器中有数据列表。
我想使用类似于viewbag的内容传递此数据。
我知道我们不能在apicontrller中使用viewbag,所以有没有替代方案。
答案 0 :(得分:2)
通常ApiControllers不返回视图。他们会返回models
或HttpResponseMessage
。因此,您只需拥有一个包含所需属性的视图模型,然后让您的API操作返回此视图模型。
答案 1 :(得分:0)
你不应该这样,API控制器只返回数据(XML,Json等)。所以你应该有两个控制器:
System.Web.Http.ApiControlle 使用此命令返回数据集合,例如:
public List<Company> Get()
{
return this._companyService.GetCompanies();
}
返回Json或XML中的公司列表,而不是视图。
System.Web.Mvc.Controller 使用此方法返回没有数据的HTML,例如没有行或客户端模板的HTML表格。
如何将两者联系起来?我的想法是在客户端使用JavaScript进行渲染,有很多理由这样做,主要是你有两个完全分离的数据和表示,所以你可以重新使用你的数据Feed(例如在移动应用中)。
要在客户端渲染,最好使用一些JavaScript渲染引擎,看看http://handlebarsjs.com/。
使用Jquery.getJSON()获取您的JSON并从您的DOM或通过Ajax获取您的手柄模板,选择DOM alement以插入生成的HTML。获得JSON后,模板和容器将使用以下函数:
function RenderJson (json,template,container) {
var compiledTemplate = Handlebars.compile(template);
var html = compiledTemplate(json);
$(container).html(html); //set new content
}
我知道这看起来似乎是一个更复杂的过程,但是你尝试它会看到优势,例如你可以分别测试数据源和数据表示。
希望有所帮助:)