我很清楚您使用带有连字符的数据属性的下划线(对象中的“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" })
所以这个问题肯定与在属性末尾加上“name”有关。
我做错了什么或遗漏了什么,或者这是.NET如何转换属性的错误?
(为了澄清,我们使用Braintree付款,他们要求在某些输入上使用“data-encrypted-name”属性,因此我们不能只选择其他属性名称。)
答案 0 :(得分:2)
感谢Tommy测试我描述的行为并发现它不是每个人的错误。
汤米写完这篇文章后,我看着我们正在使用的助手。我意识到我们实际上使用的是名为“NameLessTextBoxFor”的扩展方法(我们在这里找到它:How to extend html.textboxfor to remove the name attribute?),它在显示之前从输入中删除了name=""
属性。我应该在发布之前确认这一点,但不认识它可能会影响传递给它的HTML属性。
并且,正如您所预料的那样,此方法的功能还会切断包含name=""
的任何属性。它正在进行一个非常简单的搜索并替换该文本并将其删除。这就是问题所在。
感谢您抽出时间和关注这个问题而道歉,我自己也没有抓住这个问题。