从apicontroller传递值到asp.net mvc4中查看

时间:2013-04-24 09:29:27

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

我的api控制器中有数据列表。

我想使用类似于viewbag的内容传递此数据。

我知道我们不能在apicontrller中使用viewbag,所以有没有替代方案。

2 个答案:

答案 0 :(得分:2)

通常ApiControllers不返回视图。他们会返回modelsHttpResponseMessage。因此,您只需拥有一个包含所需属性的视图模型,然后让您的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
}

我知道这看起来似乎是一个更复杂的过程,但是你尝试它会看到优势,例如你可以分别测试数据源和数据表示。

希望有所帮助:)