我不建议您直接使用 .cshtml 文件作为视图。最好将 .cshtml 文件放在控制器后面。
以 HotTowel 示例为例,编辑 /App/main.js,将函数定义替换为以下内容:
define(['durandal/app',
'durandal/viewLocator',
'durandal/system',
'durandal/plugins/router',
'durandal/viewEngine',
'services/logger'],
function (app, viewLocator, system, router, viewEngine, logger) {
请注意,我们添加了对 Durandal viewEngine 的引用。然后我们需要替换
viewLocator.useConvention();
与
viewLocator.useConvention('viewmodels', '../../dynamic');
viewEngine.viewExtension = '/';
viewLocation.useConvention 的第一个参数将 /Apps/viewmodels/ 目录设置为视图模型 js 文件的位置,但对于视图位置,使用 URL http://example.com/dynamic/,扩展名为“/”。因此,如果 Durandal 正在寻找名为“shell”的视图,它将引用 http://example.com/dynamic/shell/(这是因为视图目录是相对于 viewmodels 目录映射的,因此 /App/viewmodels/../../dynamic 将给出你只是/动态)。
按照惯例,这个先前的 URL (http://example.com/dynamic/shell/) 将被映射到控制器 DynamicController,以及动作“Shell”。
在此之后,您只需添加一个控制器 - DynamicController.cs,如下所示:
// will render dynamic views for Durandal
public class DynamicController : Controller
{
public ActionResult Shell()
{
return View();
}
public ActionResult Home()
{
return View();
}
public ActionResult Nav()
{
return View();
}
public ActionResult Details()
{
return View();
}
public ActionResult Sessions()
{
return View();
}
public ActionResult Footer()
{
return View();
}
}
为上述每个操作创建 .cshtml 文件。这样您就可以使用控制器、服务器端 IoC 等来为您的 SPA 生成动态视图。