私は、サインアップ情報を収集するための簡単なフォームを含むプロジェクトを持っています。最近私は、ユーザーに表示されているテキストのすべてがハードコードされているため、プロジェクトにローカライゼーションを追加しようとしています。何が変わったのかは分かりませんが、RazorがHtml.EditorForメソッドを使ってHTML要素をレンダリングしてテキストボックスになると、要素のNameプロパティに ".textbox"という要素が追加されます。Html.Editor .textboxを要素名に追加する
これによりバインディングが中断されるため、モデルを受け取ったときにすべてのテキスト値がnullになります。ここで私が見ているものを、カミソリのコードの例です:
<div class="form-group" ng-class="{ 'has-error': validate && accountForm.FirstName.$invalid }">
@Html.LabelFor(m => m.FirstName, new { @class = @ViewBag.LabelCssRequired })
<div class="@ViewBag.TextboxCss">
@Html.EditorFor(m => m.FirstName, new { htmlAttributes = new { ng_model = "firstName" } })
</div>
</div>
は、ここでレンダリングされた出力です:
<input class="text-box single-line form-control ng-valid-maxlength ng-not-empty ng-dirty ng-valid-parse ng-valid ng-valid-required ng-touched" id="FirstName_textbox" maxlength="100" name="FirstName.textbox" ng-model="firstName" required="required" type="text" value="">
また、IDに「_textbox」を追加して、私は」現時点では心配していません。何らかの理由で、型が "text"の要素を入力するだけであるようです。私は別の入力を持っています.EditorForには電子メールのタイプがあり、名前に変更はありません。
この動作も、Html.EditorForに制限されているようです.TextboxForを使用するとうまく動作します。
私は、Razorの@Nameプロパティを明示的に設定することでバインディングを動作させることができましたが、これは症状のみを隠すため、サイトのすべてのテキスト入力に対してこれを行う必要はありません。
修正プログラムの前にこの動作を見たことがありますか?
万が一 'project root \ views \ shared \ editortemplates'に何かがありますか?私はこれが起こらないはずだと確信しています。不正なエディタテンプレートはこの動作を説明します。 –
@Balázsそれだったよ!どういうわけかこれらのテンプレートの1つでは、出力されたテキストボックスの名前が "textbox"であるため、 ".textbox"が追加されたようです。私はこれまでにこれらのファイルに触れる理由がなかったので、これがどのように起こったのか分かりません。答えとして投稿したい場合は、私はそれを受け入れます。それがどのようにファイルに追加されたのか把握しています – KSF