标签: razor-declarative-helpers

为什么在Razor声明式@helper方法中HtmlHelper实例为null?

使用MVC 3 RTM我变得很奇怪NullReferenceException:

@helper TestHelperMethod() {
    var extra = "class=\"foo\"";
    <div @Html.Raw(extra)></div>
}
Run Code Online (Sandbox Code Playgroud)

事实证明Html(类型HtmlHelper)是null.

我以前从未在常规视图中看过这个.我开始在Razor中尝试声明性辅助方法(到目前为止它们似乎有点受限)并且我对我在这里看到的东西感到非常难过.

.net razor razor-declarative-helpers asp.net-mvc-3

36
推荐指数
5
解决办法
1万
查看次数

在App_Code中共享@helper中使用@Html

我正在构建一个非常基本的MVC3站点,而我学习并且我在使用以下声明性Razor html帮助器时遇到困难.

在App_Code文件夹里面的RMB.cshtml里面:

@helper ReplaceCrLf(string strText)
{
    @Html.Raw(Html.Encode(strText).Replace(Environment.NewLine, "<br />"));
}
Run Code Online (Sandbox Code Playgroud)

在我的index.cshtml视图中:

@RMB.ReplaceCrLf(Model.Post)
Run Code Online (Sandbox Code Playgroud)

这给了我帮助器中Html的空引用异常,因为它似乎不知道它是什么.我可以通过将Html从视图传递给帮助器来解决这个问题,但我想知道是否有另一种方式让我的共享html助手能够引用Html而不必将其传递给我写的助手?

为了完整起见,这是工作方法:

在App_Code中的RMB.cshtml中

@helper ReplaceCrLf(string strText, System.Web.Mvc.HtmlHelper Html)
{
    @Html.Raw(Html.Encode(strText).Replace(Environment.NewLine, "<br />"));
}
Run Code Online (Sandbox Code Playgroud)

在index.cshtml视图中

@RMB.ReplaceCrLf(Model.Post, Html)
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc razor razor-declarative-helpers asp.net-mvc-3

29
推荐指数
4
解决办法
2万
查看次数

我可以在Razor中使用@helper语法返回一个字符串吗?

我有一个RazorHelpers.cshtml文件,app_code其中如下所示:

@using Molecular.AdidasCoach.Library.GlobalConstants

@helper Translate(string key)
{
    @GlobalConfigs.GetTranslatedValue(key)
}
Run Code Online (Sandbox Code Playgroud)

但是,我有一个案例,我想将结果用作链接文本@Html.ActionLink(...).我无法将结果转换为字符串.

有没有办法从Razor帮助器返回普通字符串,以便我可以在HTML和@Html帮助器中使用它们?

string type-conversion razor razor-declarative-helpers asp.net-mvc-3

26
推荐指数
3
解决办法
2万
查看次数

ASP.NET MVC - 从另一个@helper调用Razor @helper

我一直@helper在基于Scott Gu的帖子在Razor中实现一些功能,事情进展顺利.

我想知道的是,是否有可能@helper从另一个人那里打电话.例如,我有以下帮助器,显示以下日期和时间DateTime?:

@helper DateTimeDisplay(DateTime? date)
{
    if (date.HasValue)
    {
        @date.Value.ToShortDateString()<br />
        <text>at</text> @date.Value.ToShortTimeString()
    }
    else
    {
        <text>-</text>
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但在某些情况下我有其他不可空的字段,所以我尝试添加这个以保持干燥:

@helper DateTimeDisplay(DateTime date)
{
    DateTimeDisplay(new DateTime?(date));
}
Run Code Online (Sandbox Code Playgroud)

这编译并运行正常,但是当它呈现时它只显示为非可空的空字符串DateTime.这是调用@helper函数的标记.Model.UpdateDate是一个常规的DateTime,Model.LastRun是一个DateTime?

...
<tr>
    <td>Last&nbsp;updated&nbsp;</td>
    <td class="value-field">@Helpers.DateTimeDisplay(Model.UpdateDate)</td>
</tr>
<tr>
    <td>Last&nbsp;run&nbsp;</td>
    <td class="value-field">@Helpers.DateTimeDisplay(Model.LastRun)</td>
</tr>
...
Run Code Online (Sandbox Code Playgroud)

有没有办法@helper通过从另一个函数调用它来呈现一个函数?

c# asp.net-mvc razor razor-declarative-helpers asp.net-mvc-3

13
推荐指数
1
解决办法
5469
查看次数

在Asp.net MVC4 Web应用程序中使用和创建帮助程序

我使用的是Asp.net mvc4 WebRole,我发现这是一个Web应用程序,而不是一个Web站点.阅读本文后,我知道如何在Asp.MVC4中添加客户帮助程序功能.在网站应用中,我可以在app_code文件夹中添加一个cshtml文件,如下所示,以便我可以在另一个cshtml中使用我的自定义帮助方法.

  @helper  HotDeployButton(string value, string url , bool enable= true){

      string enablestr = string.Empty;
      if (!enable)
      {
          enablestr = "disabled=\"disabled\"";
      }

      <input type="button"  name="@value" value="@value" onclick=" window.location.href='@url'" class="mobile-button"  @enablestr />
  }

  @helper Img(string picName, string alt ){

      string root = "/content/themes/default/images/";
      string imgurl = root + picName;

      <img  alt="@alt" src="@imgurl" title="@alt" />

  }
Run Code Online (Sandbox Code Playgroud)

在下面显示的另一个cshtml将使用HotDeployButton方法.

<div class="bottom-div">
            @Html.Hidden("hdSelMinorPackId", "")
            <!--Html.Hidden("randomId", (object)ViewBag.RandomId)-->
            <input type="submit" name="ExcuteDeploy" id="ExcuteDeploy" value="Deploy" onclick="return validateVersion();"
                class="mobile-button" />
            &nbsp;&nbsp;&nbsp;&nbsp;
            @Helpers.HotDeployButton("Back", Url.Action("Index"))
        </div>
Run Code Online (Sandbox Code Playgroud)

但在Asp.net …

razor azure-web-roles razor-declarative-helpers asp.net-mvc-4

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

如何修复错误命名空间"系统"中不存在类型或命名空间名称"Linq"

ASP.NET MVC4应用程序包含包含Razor帮助程序的App_Code文件夹中的Helper.chtml文件.升级到Visual Studio Communitity版本后编译错误

Error   CS0234  The type or namespace name 'Linq' does not exist in the namespace 'System' (are you missing an assembly reference?) C:\Users\user\AppData\Local\Temp\Temporary ASP.NET Files\admin\e209c0e0\c74032ba\Sources_App_Code\helper.cshtml.72cecc2a.cs 16
Run Code Online (Sandbox Code Playgroud)

开始发生.生成的代码包含:

namespace ASP {
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;  // Error occurs in this line
    using System.Net;
    using System.Web;
    using System.Web.Helpers;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.WebPages;
    using System.Web.WebPages.Html;

    #line 1 "C:\Web\Erp\App_Code\Helper.cshtml"
    using System.Web.Mvc;

    #line default
    #line hidden

    #line 2 "C:\Web\Erp\App_Code\Helper.cshtml"
    using System.Threading;

    #line default
    #line hidden

    #line …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc visual-studio razor razor-declarative-helpers asp.net-mvc-4

9
推荐指数
1
解决办法
3644
查看次数

ASP.NET MVC @helper语法与Html Helper扩展方法

我需要创建自定义的html辅助方法.据我所知,有两种方法:

  1. 使用@helper razor语法.http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx

  2. 创建HtmlHelper扩展方法.

什么解决方案更好,为什么?有什么优点和缺点?

我只在MVC 3中读到,当@helper在单独的.cshtml文件中全局创建时,不可能使用其他内置的html助手.不知道可能在MVC 4中它是可以存储的.

请帮忙.

c# asp.net-mvc extension-methods razor-declarative-helpers

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

我可以在声明性帮助器中拥有私有函数或私有声明性帮助器吗?

可能重复:
在Razor ASP.Net MVC3中使用另一个View中的@helpers

我的环境:使用Razor的ASP.NET MVC3.

我在App_Data目录中的声明性帮助器中有一些可重用的视图逻辑,它们被定义为@helper bar() { /* markup */ }并且对于要使用的任何视图都是公共的.

此外,在常规Razor视图中,我可以编写"私人"助手:

@functions {
  public IHtmlString foo() { return new MvcHtmlString("foo"); }
}
Run Code Online (Sandbox Code Playgroud)

我希望在我的声明性助手中有"私有"函数,或者,我希望在我的声明性助手文件中有"私有"声明性助手.另一种方法是编写常规的辅助类 - 但在这种情况下我更喜欢标记,因为它更简洁,更易于维护.

你为什么要这样做?你有一个观点,你想要引入一些标记; 这是通过引用声明性帮助程序完成的.但该DH是一个文件,其中包含使用常见标记的其他DH.因此,您希望将所有共性转移到一个位置:一个"私有"声明函数/帮助程序,只有该文件中的DH才能看到.

c# asp.net-mvc razor razor-declarative-helpers asp.net-mvc-3

5
推荐指数
0
解决办法
140
查看次数

将冒号和星号添加到帮助生成的标签中

我在.NET 4.5 MVC应用程序中使用Razor和Data Annotations.这是一个视图模型:

    [Required(ErrorMessage = "Title is required.")]
    [Display(Name = "Title: *")]
    public string Title { get; set; }

    [Display(Name = "Comments:")]
    public string Comments { get; set; }
Run Code Online (Sandbox Code Playgroud)

有没有办法删除那些显示属性并在生成的名称后面有冒号(冒号,空格,必填字段的星号)?在错误消息中,不应显示冒号.

asp.net-mvc razor razor-declarative-helpers

4
推荐指数
1
解决办法
1200
查看次数

使用Javascsript操作的ASP.NET MVC 3中的HTML帮助程序

我在Helpers.cshtml文件中有很多HTML帮助器,但是一些帮助器(html)需要一些jquery动作,所以我如何在helpers.cshtml中调用jquery,这可能吗?

我知道我们能继续保持页眉或特定页面的js文件,但我不希望做这样的,我只希望这加载特定助手页面上使用jquery或javascript.

有谁有这个想法?我的方案是,我有列表框控件,从helper正确加载,但我需要将自定义主题应用于列表框.

更多的清晰度

//in index.cshtml
@Helpers.testListBox("mylist" "1,2,3,4,5,6,7")


//in Helpers.cshtml
@helper testListBox(string listName, string listData){

    //...... HTML code .........

    //Javascript here?

}
Run Code Online (Sandbox Code Playgroud)

c# model-view-controller html-helper razor-declarative-helpers asp.net-mvc-3

2
推荐指数
1
解决办法
3746
查看次数

什么是"HTML属性"参数?

以下示例:

@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
Run Code Online (Sandbox Code Playgroud)

似乎正在使用方法的第二个重载,LabelFor其中第二个参数htmlAttributes记录为

包含元素的Html属性的对象

术语"HTML属性"是什么意思,可以用于此对象的语法是什么?

asp.net-mvc razor razor-declarative-helpers

2
推荐指数
1
解决办法
9878
查看次数

没有[required]属性的剃刀验证触发

这是我的模特

public class SchoolUser
{
    public int schoolId { get; set; }

    public int contact1UserId { get; set; }

    public IEnumerable<DataLayer.salutations> Salutations { get; set; }

    public int departmentId { get; set; }

    public IEnumerable<DataLayer.departments> Departments { get; set; }

    [Required]
    public int roleId { get; set; }

    public IEnumerable<DataLayer.rolesView> roles { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我为deptartmentid视图创建下拉列表的剃刀代码

                <div style="width:75%; display:inline-block; margin-left:5px;">
                    @Html.DropDownListFor(model => model.departmentId, new SelectList(Model.Departments, "deptId", "description"), "")
                    @Html.ValidationMessageFor(model => model.departmentId)
                </div>                    
Run Code Online (Sandbox Code Playgroud)

让我们感到困惑的是,当没有选择部门时剃刀验证会抱怨.但学校模型没有[必需]属性.

"departmentId字段是必需的."

查看页面源我看到了

 <select data-val="true" data-val-number="The field departmentId …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc razor razor-declarative-helpers asp.net-mvc-3

1
推荐指数
1
解决办法
2159
查看次数