6

我很清楚您对带有连字符的数据属性使用下划线(对象中的“data_bind”而不是“data-bind”),它们会自动被连字符替换。但是我遇到了一个问题,如果属性以“name”结尾,你不能这样做下划线“hack”。所以我已经尝试了这两种方法,但都没有工作:

@Html.TextBoxFor(model => model.Street, new { data_encrypted_name = "street" })

@Html.TextBoxFor(model => model.Street, new { @data_encrypted_name = "street" })

当我查看生成的 HTML 时,对于上述两种情况,它都会生成:

<input data-encrypted- id="ViewModel_Street" name="ViewModel.Street" type="text" value="" />

起初,我认为这可能与多个下划线/连字符有关,但我又尝试了两个测试用例,看看会发生什么,它们都工作得很好:

@Html.TextBoxFor(model => model.Street, new { data_encrypted_namme = "street" })

@Html.TextBoxFor(model => model.Street, new { data_name_encrypted = "street" })

所以这个问题肯定与属性末尾有“名称”有关。

我做错了什么或遗漏了什么,或者这是.NET如何转换属性的错误?

(为了澄清,我们使用 Braintree Payments,它们要求在某些输入上使用“数据加密名称”属性,因此我们不能只选择另一个属性名称。)

4

1 回答 1

2

感谢 Tommy 对我描述的行为进行了测试,并发现这对每个人来说都不是一个错误。

在 Tommy 写完这篇文章后,我查看了我们正在使用的 Helper。我意识到我们实际上使用了一个名为“NameLessTextBoxFor”的扩展方法(我们在这里找到:如何扩展 html.textboxfor 以删除名称属性?),它name=""在显示之前从输入中删除属性。我应该在发布之前确认这一点,但没有意识到它会影响传递给它的 HTML 属性。

你瞧,正如您可能预期的那样,此方法的功能还切断包含name="". 它对该文本进行了非常简单的搜索和替换,然后将其删除。这就是这里的问题。

感谢您对这个问题的时间和关注,并很抱歉我自己没有发现这个问题。

于 2013-04-15T16:00:47.570 回答