6

ハイフン付きのデータ属性にアンダースコアを使用していることは承知しており (オブジェクトでは、「data-bind」ではなく「data_bind」)、それらは自動的にハイフンに置き換えられます。しかし、属性が「名前」で終わる場合、このアンダースコア「ハック」を実行できないという問題に遭遇しました。だから私はこれらの両方を試しましたが、どちらもうまくいきません:

@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="" />

最初は、これは複数のアンダースコア/ハイフンと関係があるのではないかと考えていましたが、何が起こるかを確認するためにさらに 2 つのテスト ケースを試したところ、どちらも問題なく動作しました。

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

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

したがって、この問題は、属性の末尾に「名前」があることに間違いなく関連しています。

何か間違っているか、何かが足りないのでしょうか、それとも .NET が属性を変換する方法のバグですか?

(明確にするために、Braintree Payments を使用しており、特定の入力で「data-encrypted-name」属性を使用する必要があるため、別の属性名を選択することはできません。)

4

1 に答える 1

2

私が説明した動作をテストし、それが誰にとってもバグではないことを発見してくれた Tommy に感謝します。

Tommy がこれを書いた後、使用している Helper を確認しました。「NameLessTextBoxFor」という拡張メソッドを実際に使用していることに気付きました (これは、ここで見つかりました: html.textboxfor を拡張して name 属性を削除する方法は? )。これは、name=""表示する前に入力から属性を削除します。投稿する前にこれを確認する必要がありましたが、渡された HTML 属性に影響を与える可能性があることを認識していませんでした。

そして、見よ、おそらくご想像のとおり、このメソッドの機能name="". そのテキストを非常に単純に検索して置換し、それを削除していました。それがここでの問題でした。

この問題に時間を割いてお気遣いいただき、ありがとうございます。

于 2013-04-15T16:00:47.570 に答える