【发布时间】:2013-04-17 23:14:48
【问题描述】:
我创建了一个扩展方法,当它不包含在 java 脚本标签中时可以使用。
public static class ExtensionMethods
{
public static string TickWrap(this HtmlHelper source, MvcHtmlString mvcHtmlString)
{
return "'" + mvcHtmlString.ToHtmlString().Replace("'", "''") + "'";
}
}
在我看来用法如下
@Html.TickWrap(Html.DisplayNameFor(m => Model.SampleDateTime))
它所做的只是获取下面列出的数据注释的显示名称属性,并将其显示为“日期和时间”,并在其周围加上刻度。
[Display(Name = "Date and Time")]
public DateTime SampleDateTime {get; set;}
但是,我似乎无法让它在脚本标签中工作。我收到一个 JavaScript 严重错误语法错误。以下是包含在我的视图中的脚本。
<script type="text/javascript">
$(function () {
var displayName = @Html.TickWrap(Html.DisplayNameFor(m => Model.SampleDateTime))
alert(displayName);
});
</script>
我猜这与脚本部分中 HtmlHelper 的使用有关?如果是这样,我该如何在脚本部分使用?
这是我所做工作的简化版本,但我真正想做的是填充 jqGrid 的 colNames,而不必在 javascript 中对它们进行硬编码。我想使用数据注释,所以我只需要在一个地方进行更改。 jqGrid 的 colNames 被定义为
colNames: ['ParameterId','Location', 'Parameter Name', 'Date and Time', 'Parameter Value']
【问题讨论】:
-
你试过把
''(引号)放在@Html.TickWrap(Html.DisplayNameFor(m => Model.SampleDateTime))周围吗? -
这就是我的扩展方法@Html.TickWrap 的用途......它使用“我的自定义显示名称”包装了由数据注释指定的显示名称属性
-
我认为我的问题与 @Html 在脚本标签中的使用方式有关,而不是 html 的正常渲染,但我不确定。我对 MVC 很陌生
-
我发现大多数时候当我在 javascript 中使用 MVC @commands 时,它们必须用引号括起来。试试看,如果它起作用了,我不会感到惊讶。如果是这样,我会提出一个正式的答案。
-
是的,手动单个刻度有效 var displayName = '@Html.DisplayNameFor(m => Model.SampleDateTime)' 但这引出了一个问题,即如何使其与包含刻度的 HtmlHelper 扩展一起工作''...我想我不确定这是否重要...但我会在早上尝试设置 colNames,就像我用这种方法所说的那样。
标签: jquery asp.net-mvc-4 jqgrid data-annotations