我有一個包含收集註冊信息的簡單表單的項目。最近我一直在努力爲項目添加本地化,因爲向用戶顯示的所有文本都是硬編碼的。我不確定發生了什麼變化,但出於某種原因,現在當Razor使用Html.EditorFor方法呈現HTML元素並最終成爲文本框時,元素的Name屬性會附加「.textbox」。Html.EditorFor將.textbox添加到元素名稱
這打破了綁定,所以當我收到我的模型時,所有的文本值都是空的。下面是我所看到的,剃刀代碼的例子:
<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="">
它也加入了「_textbox」的ID,但我現在並不擔心這一點。出於某種原因,這似乎只發生在類型爲「text」的輸入元素上。我使用.EditorFor生成的另一個輸入具有電子郵件的類型,並且它沒有對名稱進行任何修改。
此行爲似乎也被限制爲Html.EditorFor,如果我使用.TextboxFor,它工作正常。
我已經能夠通過在Razor中明確設置@Name屬性來使綁定工作,但這只是掩蓋了症狀,並且我想避免爲網站上的每個文本輸入執行此操作。
有沒有人見過這種行爲之前,或知道一個修復?
你有沒有在'project root \ views \ shared \ editortemplates'中有任何機會?我相信這不應該發生,一個流氓編輯器模板會解釋這種行爲。 –
@Balázs就是這樣!不知何故,在其中一個模板中,得到輸出的文本框名稱爲「文本框」,所以這似乎是它添加「.textbox」的原因。我不確定這是怎麼發生的,因爲到目前爲止我還沒有任何理由去觸摸這些文件。如果你想以此作爲答案,我會接受它。現在想知道如何將這些文件添加到文件中 – KSF