我正在尝试输入正确的名称,以便我的视图模型上的对象集合可以被绑定.
@{ViewData.TemplateInfo.HtmlFieldPrefix = listName;}
@Html.EditorFor(m => m, "DoubleTemplate", new {
Name = listName,
Index = i,
Switcher = (YearOfProgram >= i +1)
})
Run Code Online (Sandbox Code Playgroud)
正如您在此处看到的,我将"listName"作为模板的前缀传递.listName ="MyItems"的值
这是我的模板:
@model Web.Models.ListElement
@if (ViewData["Switcher"] != null)
{
var IsVisible = (bool)ViewData["Switcher"];
var index = (int)ViewData["Index"];
var thisName = (string)ViewData["Name"] + "[" + index + "].Value";
var thisId = (string)ViewData["Name"] + "_" + index + "__Value";
if (IsVisible)
{
@*<input type="text" value="@Model.Value" name="@thisName" id ="@thisId" class="cell@(index + 1)"/>*@
@Html.TextBoxFor(m => m.Value, new { @class ="cell" …Run Code Online (Sandbox Code Playgroud) 我在ForEach循环中显示dropDownLists列表.
这是代码
@foreach (var task in Model.TaskList)
{
<tr>
<td>@Html.DropDownList("ModuleID", new SelectList(Model.ModuleList, "ModuleID", "Ordre"))
</td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)
我希望默认情况下选择Module每个Task.DropDownList如果我只是将dropDownList绑定到视图模型,这可以很容易地完成,但事实并非如此.
有任何想法吗 ?
我创建了App_Code在我的MVC项目中调用的ASP.NET特殊文件夹.我添加了一个新文件Helpers.vbhtml,其中包含重复使用的剃刀代码片段.

Helpers.vbhtml
@Helper GetTime()
@DateTime.Now
End Helper
Run Code Online (Sandbox Code Playgroud)
但这会导致错误Type 'ASP.global_asax' is not defined.(x2)

似乎没有任何影响 - 应用程序仍然编译并运行.这个错误是什么意思?
我正在尝试将一个下拉列表添加到强类型剃刀视图中.ASP.Net MVC 4.0,Razor View引擎版本2.0.0.0
@using System;
@model SampleApp.Models.ServiceRequestModel
@{
ViewBag.Title = "ServiceRequest";
}
@Html.DropDownListFor(m=>m.CategoryID, Model.Categories)
Run Code Online (Sandbox Code Playgroud)
模型如下:
public class ServiceRequestModel
{
public int ID { get; set; }
public int CategoryID { get; set; }
public SelectList Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它始终在CSHTML文件中的intellisense中显示错误:
System.Web.WebPages.Html.HtmlHelper'不包含'DropDownListFor'的定义,并且没有扩展方法'DropDownListFor'接受类型'System.Web.WebPages.Html.HtmlHelper'的第一个参数可以找到(你错过了吗?) using指令或程序集引用?)
它也给出了以下错误:
错误3当前上下文中不存在名称"model"
我检查了View文件夹中的web.config:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
Run Code Online (Sandbox Code Playgroud)
有没有办法向人们公开Razor语法和(自定义)助手,但是说...不允许他们创建代码块,或者只是限制他们使用助手并且不给他们执行纯粹的权力视图中的C#代码?
欢迎任何有关类似解决方案的想法和指示!
更新: //我想让用户有权编写自己的HTML并只能访问html助手列表.主要是默认的和我创建的.
例如,我不希望他们能够在@{ //code }块内执行代码,而且没有using和@model(不确定这个)只能访问@Html.* @if else for foreach
或者更好的是,让他们只访问特定的命名空间(这只是一个想法)
更新://经过一些测试后,我发现RazorEngine与我正在尝试做的一样接近:在隔离环境中运行视图并添加对特定命名空间的访问.
我正在使用Razor和WebPages但没有MVC.我喜欢这种简单性,所以我对此使用MVC并不感兴趣.但是我希望能够将部分内容呈现在我的页面中.像菜单,页脚等
使用MVC,你可以这样:@ {Html.RenderPartial("Footer",Model);}
我想做类似的事情:@ {Html.RenderPartial("footer.cshtml"); }
我怎样才能实现我的目标?
我有一个Knockout attr绑定工作得非常好:
<a data-bind="attr: { href: 'Action?destination=' + '@Model.Property' + '&entityId=' + Id }">Select</a>
Run Code Online (Sandbox Code Playgroud)
但是,一旦将任何模型属性插入到href字符串中,Visual Studio中的语法突出显示就会抛出"未终止字符串常量"错误.
我试过'@()'和'@:',但似乎没有什么能让编辑高兴.
我正在开发一个nopCommerce插件项目.nopCommerce使用Razor语法构建在MVC4上.
我需要从我正在构建的插件/扩展中扩展一个局部视图.但是,我无法想到如何在技术上做到这一点.
任何想法,如何从nopCommerce插件/扩展中扩展/替换部分视图之一.
----更新----
我需要使用没有控制器的插件扩展局部视图(具体为_productbox.cshtml).
我真的不需要覆盖控制器及其操作方法,因为我的插件不需要它.我正在对部分视图模板的标记进行一些更改,其余的事情都是通过我的javascript完成的.所以基本上没有必要扩展控制器或动作方法.
任何想法都非常感谢.
你能告诉我吗?感谢您的答复.
提前致谢.
是否可以知道特定模板是否已使用 RazorEngine 编译?基本上,如果你打电话:
Razor.Parse("Hello there @Model.Name", model, "hello-world");
Run Code Online (Sandbox Code Playgroud)
这将使用键“hello-world”编译模板。第一次这可能需要几毫秒,但由于缓存,第二次几乎是即时的。是否可以知道模板是否已经编译?就像是:
var isCompiled = Razor.IsCompiled("Hello there @Model.Name", "hello-world");
Run Code Online (Sandbox Code Playgroud) 如何在cshtml中使用下拉列表?我正在使用下面的代码,现在它看起来像一般的 HTML,但问题是不应用引导样式。
<div class="col-md-10">
@{
List<SelectListItem> listItems = new List<SelectListItem>();
listItems.Add(new SelectListItem
{
Text = "AtlantaPort",
Value = "AtlantaPort"
});
listItems.Add(new SelectListItem
{
Text = "NewJersyTerminal",
Value = "NewJersyTerminal",
Selected = true
});
listItems.Add(new SelectListItem
{
Text = "AWS",
Value = "AWS"
});
}
@Html.DropDownListFor(model => model.PortORterminal, listItems, "AtlantaPort", new { htmlAttributes = new { @class = "form-control", } }) )
</div>
Run Code Online (Sandbox Code Playgroud)
提前致谢
razor-2 ×10
razor ×3
asp.net-mvc ×2
c# ×2
asp.net ×1
html-select ×1
isolation ×1
knockout.js ×1
nopcommerce ×1
vb.net ×1