不能使用以"name"结尾的数据属性?

Joh*_*ham 6 asp.net-mvc razor asp.net-mvc-4

我很清楚你使用带有连字符的数据属性的下划线(对象中的"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" })
Run Code Online (Sandbox Code Playgroud)

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

<input data-encrypted- id="ViewModel_Street" name="ViewModel.Street" type="text" value="" />
Run Code Online (Sandbox Code Playgroud)

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

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

@Html.TextBoxFor(model => model.Street, new { data_name_encrypted = "street" })
Run Code Online (Sandbox Code Playgroud)

所以这个问题肯定与在属性末尾有"名字"有关.

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

(为了澄清,我们使用Braintree付款,他们要求在某些输入上使用"data-encrypted-name"属性,因此我们不能只选择其他属性名称.)

Joh*_*ham 2

感谢 Tommy 测试了我所描述的行为,并发现这并不适合每个人。

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

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

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