我在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