C# 在HtmlHelper扩展方法中使用匿名对象

C# 在HtmlHelper扩展方法中使用匿名对象,c#,.net,asp.net-mvc,html-helper,anonymous-class,C#,.net,Asp.net Mvc,Html Helper,Anonymous Class,我想扩展,以便使用自定义属性呈现脚本标记(“异步”,通过示例) 我想这样使用它 @Html.RenderBundleScript("/mybundleName", new { async = ""}) 这是我的代码,不起作用(特别是,attributes.ToString()给出:System.Web.Routing.RouteValueDictionary而不是async或async='): 公共静态IHtmlString RenderBundleScript(此HtmlHelper Htm

我想扩展,以便使用自定义属性呈现脚本标记(“异步”,通过示例)

我想这样使用它

@Html.RenderBundleScript("/mybundleName", new { async = ""})
这是我的代码,不起作用(特别是,
attributes.ToString()
给出:
System.Web.Routing.RouteValueDictionary
而不是
async
async='
):

公共静态IHtmlString RenderBundleScript(此HtmlHelper HtmlHelper,
字符串绑定路径,对象htmlAttributes)
{
var attributes=HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
字符串attributesValue=(attributes==null)?
string.Empty:attributes.ToString();
if(string.IsNullOrEmpty(attributesValue))
{
返回Scripts.Render(bundlePath);
}
其他的
{
//var tag=新标记生成器(“脚本”);
//tag.MergeAttribute()???
返回Scripts.RenderFormat(“,bundlePath”);
}
}

脚本类有一个接受格式字符串的方法,该字符串将用于呈现捆绑包中的每个脚本

这对于您的扩展方法来说很方便。可以使用html属性为脚本标记创建格式字符串。此格式字符串如下所示:

 <script async="" fooAttrib="1" src="{0}" type="text/javascript"></script>
如果您在以下行中调用它:

@Html.RenderBundleScript("~/bundles/jqueryval", new {async = "", dummy="1"})
它将呈现此输出:

<script async="" dummy="1" src="/Scripts/jquery.validate.js" type="text/javascript"></script>
<script async="" dummy="1" src="/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>


希望有帮助

也许你可以给“不起作用”下一个更好的定义?您是否得到任何输出或异常?如果是,那又怎样?我不是来把匿名对象{async=”“}转换成html属性列表(“
async=”
”)的。。。唯一的问题是,不可能添加没有价值的属性,比如“异步”…这一点很好!但是,根据W3C,空值(或等于属性名称的值,如
async=“async”
)是有效的:如果属性存在,则其值必须是空字符串或与属性规范名称不区分大小写的匹配值,且不带前导或尾随空格。如果仍然需要,可能需要手动构建tagFormat字符串,而不是使用
TagBuilder
类。
@Html.RenderBundleScript("~/bundles/jqueryval", new {async = "", dummy="1"})
<script async="" dummy="1" src="/Scripts/jquery.validate.js" type="text/javascript"></script>
<script async="" dummy="1" src="/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>