我在VS2012的DurandalJS入门套件模板...所有的伟大工程......如何在Durandal中使用cshtml文件?
但在一些看法,我需要做这样的事情:
@if (Roles.IsUserInRole("Administrators"))
{
<p>Test</p>
}
与迪朗达尔
但是所有我的意见是' .html'文件...可以使用'.cshtml'文件来访问这些信息吗?
或者还有其他方法可以做到与杜兰达相同吗?
少年
我在VS2012的DurandalJS入门套件模板...所有的伟大工程......如何在Durandal中使用cshtml文件?
但在一些看法,我需要做这样的事情:
@if (Roles.IsUserInRole("Administrators"))
{
<p>Test</p>
}
与迪朗达尔
但是所有我的意见是' .html'文件...可以使用'.cshtml'文件来访问这些信息吗?
或者还有其他方法可以做到与杜兰达相同吗?
少年
是的,你可以绝对在Durandal中使用cshtml文件,并利用服务器上的Razor。我认为这也意味着你想要MVC,所以你也可以这样做,并使用它的路由。
如果您不想要路由,那么您可以在web.config中设置webpages.Enabled,如其他评论所示。
<add key="webpages:Enabled" value="true" />
durandal开箱即用cshtml?您能否请提一下如何使用cshtml以及直接在durandal中使用viewlocator的控制器? – 2014-01-19 21:35:38
您能否提供更多信息? – 2014-03-14 12:54:41
@ John-papa能否解释一下please.I试试web,config,但是durandal给我错误“View Not Found。Searched for”views/shell“via path”text!views/shell.html“。”。 [我已将shell.html更改为shell.cshtml] – 2016-03-03 21:57:17
我不是很熟悉,但DurandalJS,因为它是一个客户端系统,应该没有什么区别什么技术用于在服务器上生成的HTML标记。因此,如果您使用Razor CSHTML文件在服务器上生成HTML,则DurandalJS应该可以正常工作。
如果您遇到了特定错误,请分享该错误,但我想不出任何原因导致无法正常工作。
类似的问题在这里:https://groups.google.com/forum/#!topic/durandaljs/hpfZB-WFEXk – 2013-02-20 19:13:15
谢谢...我试过(viewEngine.viewExtension ='.cshtml'),但得到了相同的(403 Forbidden) – Junior 2013-02-20 19:17:56
@Junior你不想直接请求CSHTML文件 - 你不能自己运行一个MVC视图。相反,请求将运行视图的MVC控制器操作。例如,MVC应用程序中的/ Home/Index将在HomeController类上运行Index()操作方法。然后这将呈现〜/ Views/Home/Index.cshtml视图。 – Eilon 2013-02-20 19:36:09
DurandaljS是一种客户端框架,主要为单页面应用程序(SPA)形成一个坚实的基础。 我假设你使用asp.net web API作为你的服务器技术。在这种情况下,您可以确定用户在API控制器中的角色,并根据返回数据给客户端。在客户端上,您可以使用Knockout“if”绑定来显示/隐藏页面的某些区域。
你也许能做的就是将这段代码放在Index.cshtml中。
我不建议您直接使用.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) {
注。然后,我们需要
viewLocator.useConvention('viewmodels', '../../dynamic');
viewEngine.viewExtension = '/';
的第一个参数viewLocation.useConvention设置/应用/的ViewModels /目录作为视图模型的js文件的位置,以取代
viewLocator.useConvention();
,但对于观察位置,使用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生成动态视图。
如果我们想要多个文件夹查看视图,该怎么办? ...例如一个电影文件夹,一个产品和...?! – 2013-03-21 09:40:09
您可以随时使用Controller.Redirect指向不同文件夹中完全不同的.cshtml视图。 – 2013-03-21 09:53:12
thanx。所以你说我们必须有一个控制器和多个视图? – 2013-03-21 10:04:08
我这样做是这样的:
为迪朗达尔意见创建一个通用的控制器:
public class DurandalViewController : Controller
{
//
// GET: /App/views/{viewName}.html
[HttpGet]
public ActionResult Get(string viewName)
{
return View("~/App/views/" + viewName + ".cshtml");
}
}
注册一个路线:
routes.MapRoute(
name: "Durandal App Views",
url: "App/views/{viewName}.html",
defaults: new { controller = "DurandalView", action = "Get" }
);
复制查看/网络.config配置到/App/views/web.config(所以Razor在这个位置查看工作)。
这让我正常使用的迪朗达尔公约(甚至HTML扩展视图),并把迪朗达尔意见CSHTML文件在其正常位置,无需添加任何更多的服务器代码。
如果您也有静态html视图,您还可以将cshtml视图放在子文件夹中或使用正常的MVC/Views文件夹。
我不推荐在Durandal中使用ASP.NET MVC。
你可能要做的是使用剃刀视图引擎(以获得编译器的好处,强类型等),它独立于ASP.NET MVC存在。只有WebAPI用于数据I/O足以非常有效地创建Durandal.js应用程序。
如果您有兴趣使用剃刀/ CSHTML与迪朗达尔和淘汰赛有一个开放源码的选项在那里叫FluentKnockoutHelpers,可能是你正在寻找什么。它提供了许多ASP.NET MVC的“精彩”部分,让您可以使用Durandal和Knockout的卓越功能,几乎没有任何问题。
简而言之它提供了一堆这使得做迪朗达尔/淘汰赛发展就像ASP.NET MVC为方便等特点。 (您只需提供一个C#类型,您的JavaScript模型基于大部分功能。)您只需为复杂的情况编写JavaScript和未编译的标记,这是不可避免的,与MVC没有区别! (除了在MVC你的代码也将有可能最终也将是一个很大的jQuery的混乱这就是为什么你在第一时间使用迪朗达尔/淘汰赛!)
特点:
例无FluentKnockoutHelpers
<div class="control-group">
<label for="FirstName" class="control-label">
First Name
</label>
<div class="controls">
<input type="text" data-bind="value: person.FirstName" id="FirstName" />
</div>
</div>
<div class="control-group">
<label for="LastName" class="control-label">
Last Name
</label>
<div class="controls">
<input type="text" data-bind="value: person.LastName" id="LastName" />
</div>
</div>
<h2>
Hello,
<!-- ko text: person.FirstName --><!-- /ko -->
<!-- ko text: person.LastName --><!-- /ko -->
</h2>
提供FluentKnockoutHelpers与.NET类型,你可以使用智能感知和剃刀/ CSHTML编译
@{
var person = this.KnockoutHelperForType<Person>("person", true);
}
<div class="control-group">
@person.LabelFor(x => x.FirstName).Class("control-label")
<div class="controls">
@person.BoundTextBoxFor(x => x.FirstName)
</div>
</div>
<div class="control-group">
@person.LabelFor(x => x.LastName).Class("control-label")
<div class="controls">
@person.BoundTextBoxFor(x => x.LastName)
</div>
</div>
<h2>
Hello,
@person.BoundTextFor(x => x.FirstName)
@person.BoundTextFor(x => x.LastName)
</h2>
采取做到这一点的风格看看Source或Live Demo全面了解FluentKnockoutHelper在非平凡Durandal.js应用程序中的功能。
好的工作,谢谢。 – 2013-06-05 16:55:56
谢谢!让我知道它是如何和/或噱头拉! – 2013-06-05 20:27:20
以下链接显示如何自定义的moduleId到viewid映射
http://durandaljs.com/documentation/View-Location/
按照惯例迪朗达尔试图找到视图链接在下面的步骤
1)Checke对象是否具有getView()
函数返回或者DOM或一个字符串(网址为视图)
2)如果对象没有getView函数,则检查对象是否有viewUrl
道具erty
3)如果上述两个步骤未能产生URL或DOM视图drundal下降到默认惯例
其中的moduleId xyz.js
映射使用main.js
xyz.html
所以的moduleId xyz.js视图的路径将是views/xyz.html
您可以通过覆盖convertModuleIdToViewId
功能覆盖此默认映射行为。
因此,有很多方法可以自定义视图的URL特定型号(.js文件对象)
最后。所以很多人都在问怎么回答,只有你似乎回答了这个问题,而不是讲述问题的错误,我们不应该同时使用服务器端和客户端的东西。 – 2016-08-29 19:08:31
我做了一个扩展,迪朗达尔一起给你把一个applicationContent格在CSHTML文件的功能与applicationHost div。在applicationContent中,您现在可以使用ASP .Net MVC语法和敲除绑定。
我只是做了一些额外的代码在viewLocator。js文件看起来为applicationContent DIV:
locateViewForObject: function(obj, area, elementsToSearch) {
var view;
if (obj.getView) {
view = obj.getView();
if (view) {
return this.locateView(view, area, elementsToSearch);
}
}
if (obj.viewUrl) {
return this.locateView(obj.viewUrl, area, elementsToSearch);
}
view = document.getElementById('applicationContent');
if (view) {
return this.locateView(view, area, elementsToSearch);
}
var id = system.getModuleId(obj);
if (id) {
return this.locateView(this.convertModuleIdToViewId(id), area, elementsToSearch);
}
return this.locateView(this.determineFallbackViewId(obj), area, elementsToSearch);
},
你原来CSHTML文件现在可以做这样的事情:
<div class="row underheader" id="applicationContent">
<div class="small-5 columns">
<div class="contentbox">
@using (Html.BeginForm("Generate", "Barcode", FormMethod.Post, Attributes.Create()
.With("data-bind", "submit: generateBarcodes")))
{
<div class="row formrow">
<label for="aantalBijlagen">@Translations.Label_AantalBijlagen</label>
</div>
<div class="row">
<select name="aantalBijlagen" class="small-6 columns">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</div>
<div class="row">
<button class="button right" type="submit" id="loginbutton"><span class="glyphicon glyphicon-cog"></span> @Translations.Action_Generate</button>
</div>
}
</div>
</div>
<div class="small-7 columns" data-bind="if: hasPdfUrl">
<div class="contentbox lastcontent">
<iframe data-bind="attr: {src: pdf_url}"></iframe>
</div>
</div>
请阅读这篇文章,了解为什么使用cshtml可能是一个坏主意:http://stackoverflow.com/questions/15554919/how-to-use-partial-views-with-durandal-js-mvc3 – 2013-03-23 17:21:05
其实,我不一定会对上述链接中的要点感到担心,这个链接与MVC相比只涉及Razor。使用一点cshtml来管理安全性和捆绑(这是我们所做的)完全不会影响您应用的SPA性质。它仍然只有一个页面,从服务器发送一次。此后,这都是杜兰达。 – drdwilcox 2013-09-05 21:17:29
@Junior你能告诉我你是如何设法在durandal中使用mvc和.cshtml视图 - 所有步骤? – 2014-01-19 21:36:20