标签: razor

未找到Razor HtmlHelper Extensions(或其他视图命名空间)

Dunno如果在PR或Beta中发生这种情况,但如果我创建了一个扩展方法HtmlHelper,则在Razor驱动的页面中无法识别:

namespace SomeNamespace.Extensions {
    public static class HtmlExtensions {
        public static string Foo(this HtmlHelper html) {
            return "Foo";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我把它添加到以下<Namespaces>部分Web.config:

<pages>
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <!-- snip -->
    <add namespace="SomeNamespace.Extensions"/>
  </namespaces>
</pages>
Run Code Online (Sandbox Code Playgroud)

但是在尝试查看页面时会抛出编译错误:

@Html.Foo()
Run Code Online (Sandbox Code Playgroud)

如果我使用WebForms重新创建页面,它可以正常工作.这是怎么回事?

解决方法

如果我@using SomeNamespace.Extensions在我的Razor视图中包含它,那么它可以工作,但我更愿意将它包含在内Web.config

extension-methods html-helper razor asp.net-mvc-3

166
推荐指数
4
解决办法
12万
查看次数

Razor View Engine:表达式树可能不包含动态操作

我有一个类似的模型:

public class SampleModel
{
     public Product Product { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我尝试打印出异常

@Html.TextBoxFor(p => p.Product.Name)
Run Code Online (Sandbox Code Playgroud)

这是错误:

Exception: An expression tree may not contain a dynamic operation
Run Code Online (Sandbox Code Playgroud)

如果有人能给我一些如何解决这个问题的线索我真的很感激!

asp.net-mvc .net-4.0 razor

164
推荐指数
5
解决办法
9万
查看次数

混合Razor和Javascript代码

我对如何混合剃刀和js很困惑.这是我坚持的当前功能:

<script type="text/javascript">

        var data = [];

        @foreach (var r in Model.rows)
        {
                data.push([ @r.UnixTime * 1000, @r.Value ]);
        }
Run Code Online (Sandbox Code Playgroud)

如果我可以声明c#代码<c#></c#>而其他一切都是JS代码 - 这就是我所追求的:

<script type="text/javascript">

        var data = [];

        <c#>@foreach (var r in Model.rows) {</c#>
                data.push([ <c#>@r.UnixTime</c#> * 1000, <c#>@r.Value</c#> ]);
        <c#>}</c#>
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

javascript c# razor

164
推荐指数
4
解决办法
17万
查看次数

MVC和Razor中的Html.TextboxFor和Html.EditorFor之间的差异

为什么默认情况下在添加新的"编辑"视图时会更改这些内容?使用EditorFor()vs.有什么好处TextboxFor()

我找到了这个

默认情况下,Create和Edit脚手架现在使用Html.EditorFor助手而不是Html.TextBoxFor助手.当"添加视图"对话框生成视图时,这会以数据注释属性的形式改进对模型元数据的支持.

asp.net-mvc razor asp.net-mvc-3

163
推荐指数
4
解决办法
13万
查看次数

正确使用_viewstart.cshtml和部分Razor视图的方法?

我正在使用_viewstart.cshtml自动为我的视图分配相同的Razor布局.

它是我的Views文件夹根目录中的一个死的简单文件,如下所示:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)

这比将@Layout指令添加到每个视图更干.

但是,这对Razor 局部视图造成了问题,因为它们运行_viewstart.cshtml的内容,因此错误地为自己分配了一个布局,这使得它们不再是局部的.

这是一个假设项目,显示_viewstart.cshtml文件,共享_layout.shtml文件和部分视图("AnonBar.cshtml").

示例项目结构

目前,我解决这个问题的方法是在每个局部视图中添加以下行:

@{
    Layout = "";
}
Run Code Online (Sandbox Code Playgroud)

这似乎是在Razor中将视图表示为部分视图的错误方式.(请注意,与Web窗体视图引擎不同,部分视图的文件扩展名相同.)

我考虑的其他选项,但更糟糕的是:

  • 将所有部分视图放入公共文件夹,这样他们就可以共享一个共同的_viewstart.cshtml.这会破坏与其控制器位于同一文件夹中的视图约定.
  • 不使用部分视图.

这是Razor视图引擎团队仍在充实的东西,还是我错过了一个基本概念?

razor asp.net-mvc-3

155
推荐指数
1
解决办法
6万
查看次数

Razor中的动态匿名类型导致RuntimeBinderException

我收到以下错误:

'object'不包含'RatingName'的定义

当您查看匿名动态类型时,它显然具有RatingName.

错误的屏幕截图

我意识到我可以用元组做到这一点,但我想理解为什么会出现错误信息.

dynamic anonymous-types razor asp.net-mvc-3

155
推荐指数
5
解决办法
6万
查看次数

MVC 3:当通过ajax加载时,如何在没有布局页面的情况下呈现视图?

我正在学习渐进式增强功能,我对AJAXifying视图有疑问.在我的MVC 3项目中,我有一个布局页面,一个viewstart页面和两个普通视图.

viewstart页面位于Views文件夹的根目录中,因此适用于所有视图.它指定所有视图都应该_Layout.cshtml用于其布局页面.布局页面包含两个导航链接,每个视图一个.链接用于@Html.ActionLink()将自己呈现给页面.

现在我添加了jQuery并希望劫持这些链接并使用Ajax动态加载页面上的内容.

<script type="text/javascript">
    $(function () {
        $('#theLink').click(function () {
            $.ajax({
                url: $(this).attr('href'),
                type: "GET",
                success: function (response) {
                    $('#mainContent').html(response);
                }
            });
            return false;
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

我可以通过两种方式来做到这一点,但我并不特别喜欢这两种方式:

1)我可以获取整个View的内容并将它们放在局部视图中,然后让主视图在渲染时调用局部视图.这样,Request.IsAjaxRequest()在控制器中使用,我可以根据请求是否是Ajax请求返回View()或返回PartialView().我无法将常规视图返回到Ajax请求,因为它将使用布局页面,我将获得注入的布局页面的第二个副本.但是,我不喜欢这个,因为它迫使我创建空视图,其中只有一个@{Html.RenderPartial();}用于标准GET请求.

    public ActionResult Index()
    {
        if (Request.IsAjaxRequest())
            return PartialView("partialView");
        else
            return View();
    }
Run Code Online (Sandbox Code Playgroud)

然后在Index.cshtml中执行以下操作:

@{Html.RenderPartial("partialView");}
Run Code Online (Sandbox Code Playgroud)

2)我可以从_viewstart中删除布局指定,并在请求不是Ajax时手动指定它:

    public ActionResult Index()
    {
        if (Request.IsAjaxRequest())
            return View(); // Return view with no master.
        else
            return View("Index", "_Layout"); // Return …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc master-pages razor asp.net-mvc-3

152
推荐指数
5
解决办法
15万
查看次数

如何使用Razor将未编码的Json写入我的View?

我正在尝试使用Razor将对象作为JSON编写到我的Asp.Net MVC View中,如下所示:

<script type="text/javascript">
  var potentialAttendees = @Json.Encode(Model.PotentialAttendees);
</script>
Run Code Online (Sandbox Code Playgroud)

问题是在输出中JSON被编码,我的浏览器不喜欢它.例如:

<script type="text/javascript">
    var potentialAttendees = [{&quot;Name&quot;:&quot;Samuel Jack&quot;},];
</script>
Run Code Online (Sandbox Code Playgroud)

如何让Razor发出未编码的JSON?

asp.net-mvc json razor

147
推荐指数
3
解决办法
7万
查看次数

如何使用 ?:if语句使用Razor和内联代码块

我正在使用新的Razore视图引擎更新旧的.aspx视图.我有很多地方,我有这样的代码:

<span class="vote-up<%= puzzle.UserVote == VoteType.Up ? "-selected" : "" %>">Vote Up</span>
Run Code Online (Sandbox Code Playgroud)

理想情况下我想这样做:

<span class="vote-up@{puzzle.UserVote == VoteType.Up ? "-selected" : ""}">Vote Up</span>
Run Code Online (Sandbox Code Playgroud)

但是这里有两个问题:

  1. vote-up@{puzzle.UserVote ....不会将@符号视为代码块的开头
  2. @puzzle.UserVote == VoteType.Up查看第一部分@puzzle.UserVote,好像它应该呈现变量的值.

有谁知道如何解决这些问题?

asp.net syntax asp.net-mvc razor asp.net-mvc-3

147
推荐指数
4
解决办法
9万
查看次数

如何向Razor页面添加额外的命名空间而不是@using声明?

我需要使用某种魔法来获取pages/namespaceswebconfig中元素的名称空间吗?

<pages>
    <namespaces>
        <add namespace="System.Web.Mvc"/>
        <add namespace="System.Web.Mvc.Ajax"/>
        <add namespace="System.Web.Mvc.Html"/>
        <add namespace="System.Web.Routing"/>
        <add namespace="System.Web.WebPages"/>
        <add namespace="System.Web.Helpers"/>
        <add namespace="MyCustomHelpers"/>
    </namespaces>
</pages>
Run Code Online (Sandbox Code Playgroud)

以上只是想要的工作.我知道命名空间很好,因为当我把它@using MyCustomHelpers放在页面的顶部时它神奇地起作用.

这样我就可以在Html.SomeFunction()不必将@using所有页面放在首位的情况下开始工作

razor asp.net-mvc-3

146
推荐指数
3
解决办法
5万
查看次数