mvc中 html的对象吗,asp.net-mvc – 什么是HtmlHelper渲染htmlAttributes对象的方法?

我不确定你到底在找什么.传统上,编辑器模板只会传递htmlAttributes.例如:

视图

@Html.EditorFor(m => m.FooString, new { htmlAttributes = new { @class = "foo" } })

String.cshtml

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue.ToString(), ViewData["htmlAttributes"])

如果您正在询问如何执行类似设置默认值的操作,然后可以通过传递htmlAttributes来覆盖或添加默认值.那么,你在那里几乎就是你自己. MVC中没有任何东西可以帮助你(至少完全没有).但是,我确实编写了自己的HtmlHelper扩展来处理这个问题.我实际上写了一个blog post来解释它的作用以及如何使用它.我建议你检查一下,但我会在这里发布代码以保证完整性.

using System.Collections.Generic;

using System.Linq;

using System.Web.Mvc;

using System.Web.Routing;

public static partial class HtmlHelperExtensions

{

public static IDictionary MergeHtmlAttributes(this HtmlHelper helper, object htmlAttributesObject, object defaultHtmlAttributesObject)

{

var concatKeys = new string[] { "class" };

var htmlAttributesDict = htmlAttributesObject as IDictionary;

var defaultHtmlAttributesDict = defaultHtmlAttributesObject as IDictionary;

RouteValueDictionary htmlAttributes = (htmlAttributesDict != null)

? new RouteValueDictionary(htmlAttributesDict)

: HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributesObject);

RouteValueDictionary defaultHtmlAttributes = (defaultHtmlAttributesDict != null)

? new RouteValueDictionary(defaultHtmlAttributesDict)

: HtmlHelper.AnonymousObjectToHtmlAttributes(defaultHtmlAttributesObject);

foreach (var item in htmlAttributes)

{

if (concatKeys.Contains(item.Key))

{

defaultHtmlAttributes[item.Key] = (defaultHtmlAttributes[item.Key] != null)

? string.Format("{0} {1}", defaultHtmlAttributes[item.Key], item.Value)

: item.Value;

}

else

{

defaultHtmlAttributes[item.Key] = item.Value;

}

}

return defaultHtmlAttributes;

}

}

然后,在您的编辑器模板中(此示例中为Date.cshtml):

@{

var defaultHtmlAttributesObject = new { type = "date", @class = "form-control" };

var htmlAttributesObject = ViewData["htmlAttributes"] ?? new { };

var htmlAttributes = Html.MergeHtmlAttributes(htmlAttributesObject, defaultHtmlAttributesObject);

}

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue.ToString(), htmlAttributes)

UPDATE

I cannot use @Html.TextBox, but need to write manually

为什么?帮助器版本没有任何你无法做到的事情.但是,如果你坚持走这条路,那么你将很难用Razor做这件事.假设您实际上可以在没有Razor语法错误的情况下编写它,那么代码将变得虚拟不可读.我建议在纯C#中使用TagBuilder和/或StringBuilder来构造一个字符串,然后确保返回/设置一个MvcHtmlString类型的变量:

var output = new MvcHtmlString(builder.ToString());

但是,如果你走得那么远,它会否定使用编辑器模板的目的,除非你试图覆盖其中一个默认的编辑器模板.无论如何,我建议您只创建自己的HtmlHelper扩展,然后直接在视图中使用它或在编辑器模板中使用它.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值