使用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中尝试声明性辅助方法(到目前为止它们似乎有点受限)并且我对我在这里看到的东西感到非常难过.
我正在构建一个非常基本的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) 我有一个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
我一直@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 updated </td>
<td class="value-field">@Helpers.DateTimeDisplay(Model.UpdateDate)</td>
</tr>
<tr>
<td>Last run </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
我使用的是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" />
@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
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
我需要创建自定义的html辅助方法.据我所知,有两种方法:
使用@helper razor语法.http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx
创建HtmlHelper扩展方法.
什么解决方案更好,为什么?有什么优点和缺点?
我只在MVC 3中读到,当@helper在单独的.cshtml文件中全局创建时,不可能使用其他内置的html助手.不知道可能在MVC 4中它是可以存储的.
请帮忙.
我的环境:使用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
我在.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)
有没有办法删除那些显示属性并在生成的名称后面有冒号(冒号,空格,必填字段的星号)?在错误消息中,不应显示冒号.
我在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
以下示例:
@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
Run Code Online (Sandbox Code Playgroud)
似乎正在使用方法的第二个重载,LabelFor
其中第二个参数htmlAttributes
记录为
包含元素的Html属性的对象
术语"HTML属性"是什么意思,可以用于此对象的语法是什么?
这是我的模特
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)