我有一个HtmlHelper扩展方法,我正在为MVC / Razor网站编写。方法签名如下:
public static IHtmlString CharacterCountOf<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Func<Expression<Func<TModel, TProperty>>, object, IHtmlString> helperMethod,
Expression<Func<TModel, TProperty>> expression,
object htmlAttributes){}
如果您注意到我正在将方法签名作为参数。这些方法通常是其他HtmlHelper方法,如TextAreaFor()
。方法签名中的object
是html属性。我想要做的是采用匿名类型,将自己的属性添加到对象,然后调用作为参数传入的方法签名。像这样:
var identifier = Guid.NewGuid().ToString();
// somehow add identifier to htmlAttributes
helperMethod(expression, htmlAttributes)
我遇到的所有解决方案都是将htmlAttributes更改为IDictionary
,然后它不会为方法签名工作,或者要求您知道匿名类型的结构。
以下是我尝试/研究过的一些不同方法:Use a Json object to construct an anonymous type, Use an extension method to map a dictionary to an anonymous type或convert the anonymous type to a dictionary, expandoObject, or dynamic
因为这里有人建议我问这个问题: 此方法用于生成HTML / JS,用于计算文本框/区域中的字符数,并在右下角显示该计数。我最初拥有HTML / JS中的所有代码,但在我重构现有文本输入时,我发现实现此功能所需的步骤数量令人烦恼且繁琐。我可以使用C#来总是包含让这项工作变得烦人的烦恼。使用新方法重构并将此功能添加到新文本输入变得非常容易。
最初我尝试在name属性上触发JS事件,该属性生成$([name='Description']).on('keyup')
,直到遇到DOM中具有该属性和值的多个元素时才遇到问题。因此,我需要一种方法来为HTML元素添加一个唯一的标识符,JS将用它来观察文本输入。