Asp.net mvc 3 带有KnockoutJs和ASP.NET MVC3的动态模板

Asp.net mvc 3 带有KnockoutJs和ASP.NET MVC3的动态模板,asp.net-mvc-3,knockout.js,jquery-templates,Asp.net Mvc 3,Knockout.js,Jquery Templates,我有一个相当大的ASP.NET MVC web应用程序,它在整个过程中广泛使用KnockoutJS。多年来,我为应用程序创建了许多模板,但是它们都使用命名脚本标记驻留在各种网页中。在各种不同的视图上管理它们几乎变得难以忍受。我想找出一种方法,将这些模板整合到它们自己的html文件中,以便它们更易于管理 我想知道是否有任何库支持这个概念?我不想重新发明轮子,因为我相信过去已经有人遇到过这个问题并解决了它。这里是我正在处理的快速概述 基本上,我有很多内容类似于下面的标记。请注意,我在与实际内容标记相

我有一个相当大的ASP.NET MVC web应用程序,它在整个过程中广泛使用KnockoutJS。多年来,我为应用程序创建了许多模板,但是它们都使用命名脚本标记驻留在各种网页中。在各种不同的视图上管理它们几乎变得难以忍受。我想找出一种方法,将这些模板整合到它们自己的html文件中,以便它们更易于管理

我想知道是否有任何库支持这个概念?我不想重新发明轮子,因为我相信过去已经有人遇到过这个问题并解决了它。这里是我正在处理的快速概述

基本上,我有很多内容类似于下面的标记。请注意,我在与实际内容标记相同的页面中定义了模板:

[[ HOME/INDEX.CSHTML ]]

<h1>Customers</h1>
<div data-bind="template: {name: 'personTmpl', foreach: customers}"></div>

<h1>Products</h1>
<div data-bind="template: {name: 'productTmpl', foreach: products}"></div>

<script type="text/html" id="personTmpl">
  Name: <span data-bind="text: name" />
  Address: <span data-bind="text: address" />
</script>

<script type="text/html" id="productTmpl">
  Description: <span data-bind="text: description" />
  Category: <span data-bind="text: category" />
</script>

<script type="text/javascript">
  $(function(){
    var json = { 
      customers: [ { name: 'Joe', address: 'Denver, CO' } ],
      products: [ { name: 'Skis', category: 'Outdoors' } ]
    };
    var vm = new CustomViewModel(json);
    ko.applyBindings(vm);
  });
</script>

[[ END HOME/INDEX.CSHTML ]]
通过将它们存储到自己的模板中,我甚至可以使用老式的
$.get('/tmpl/Person.tmpl',renderFunc)
动态查询工具提示和对话框的内容

同样,我不介意创建自己的实现,但我相信已经有了解决方案。有人吗


提前谢谢

我的建议是在这里查看外部模板引擎:

它允许您将模板放置在外部文件中,在绑定中引用它们,就像通常使用
name
参数一样,并使用一些约定或配置来确定查找模板文件的确切路径

外部模板引擎是一个非常健壮的解决方案。我最近也在使用
require.js
及其
text
插件来实现这一目的。此答案中的更多信息:

如果您想在线呈现它们,那么我假设一个助手函数可以加载文件并将其包装在一个非JS类型的脚本标记中。

Ryan-这正是我想要的!谢谢大家!+1.
@section templates {
  @Content.Template("Person.tmpl", Url)
  @Content.Template("Product.tmpl", Url)
}

<h1>Customers</h1>
<div data-bind="template: {name: 'personTmpl', foreach: customers}"></div>

<h1>Products</h1>
<div data-bind="template: {name: 'productTmpl', foreach: products}"></div>

<script type="text/javascript">
  $(function(){
    var json = @Html.Raw(Json.Encode(ViewBag.PageData)));
    var vm = new CustomViewModel(json);
    ko.applyBindings(vm);
  });
</script>