c# - 将 HTML 属性添加到匿名类型而不更改方法签名
问题描述
我有一个为 MVC/Razor 网站编写的 HtmlHelper 扩展方法。方法签名如下:
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
用于方法签名的方法,要么要求您知道匿名类型的结构。
以下是我尝试/研究过的一些不同方法:使用 Json 对象构造匿名类型, 使用扩展方法将字典映射到匿名类型或将匿名类型转换为字典、expandoObject 或动态
既然这里有人建议,这就是我问这个问题的原因:此方法用于生成 HTML/JS,它计算文本框/区域中的字符数并在右下角显示该计数。我最初拥有 HTML/JS 中的所有代码,但是当我重构现有的文本输入时,我发现实现此功能所需的步骤数量令人讨厌且繁琐。我可以使用 C# 来始终包含使这项工作有效的烦人部分。使用新方法重构并将此功能添加到新的文本输入中变得非常容易。
最初,我尝试在生成的 name 属性上触发 JS 事件,$([name='Description']).on('keyup')
这非常有效,直到我遇到问题,当 DOM 中存在多个具有该属性和值的元素时。因此,我需要一种方法来为 JS 用来观察文本输入的 HTML 元素添加一个唯一标识符。
解决方案
推荐阅读
- opencv - 在标记姿势估计之后,如何将投影机器人与机器人一起使用?
- python - 在 Pandas 中导出计算以生成 Excel 表
- python - 在android中重新启动后未启动Kivy服务
- python - Spyder、spyder-kernels 和 python 版本的兼容性?
- python - SAS 数据框转 CSV
- javascript - 未使用 BazingaJsTranslationBundle 定义的转换器
- python-3.x - 部署 Python Azure 功能的 Azure Devops 不起作用
- excel - VBA:如何将图形声明为对象
- assembly - 中断与子程序调用有何不同?
- c++ - 使用带有位字段的 std::tie 似乎失败了