2017-10-13 1 views
0

私は、サインアップ情報を収集するための簡単なフォームを含むプロジェクトを持っています。最近私は、ユーザーに表示されているテキストのすべてがハードコードされているため、プロジェクトにローカライゼーションを追加しようとしています。何が変わったのかは分かりませんが、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プロパティを明示的に設定することでバインディングを動作させることができましたが、これは症状のみを隠すため、サイトのすべてのテキスト入力に対してこれを行う必要はありません。

修正プログラムの前にこの動作を見たことがありますか?

+0

万が一 'project root \ views \ shared \ editortemplates'に何かがありますか?私はこれが起こらないはずだと確信しています。不正なエディタテンプレートはこの動作を説明します。 –

+0

@Balázsそれだったよ!どういうわけかこれらのテンプレートの1つでは、出力されたテキストボックスの名前が "textbox"であるため、 ".textbox"が追加されたようです。私はこれまでにこれらのファイルに触れる理由がなかったので、これがどのように起こったのか分かりません。答えとして投稿したい場合は、私はそれを受け入れます。それがどのようにファイルに追加されたのか把握しています – KSF

答えて

1

デフォルトでは、TextBoxForヘルパーは組み込みテンプレートを使用してHTMLを生成します。 project root\views\shared\editortemplatesフォルダーにファイルを作成して、デフォルトを上書きすることができます。

したがって、カスタムテンプレートが存在するため、この問題が発生する可能性があります。通常、名前が一致するデータ型(たとえば、string)または制御タイプ(たとえば、TextArea)をチェックする必要があります。対応するモデルプロパティーにUIHint属性がある場合は、その中に指定されているカスタムファイルも再生できます。

関連する問題