2017-10-13 116 views
0

我有一個包含收集註冊信息的簡單表單的項目。最近我一直在努力爲項目添加本地化,​​因爲向用戶顯示的所有文本都是硬編碼的。我不確定發生了什麼變化,但出於某種原因,現在當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屬性來使綁定工作,但這只是掩蓋了症狀,並且我想避免爲網站上的每個文本輸入執行此操作。

有沒有人見過這種行爲之前,或知道一個修復?

+0

你有沒有在'project root \ views \ shared \ editortemplates'中有任何機會?我相信這不應該發生,一個流氓編輯器模板會解釋這種行爲。 –

+0

@Balázs就是這樣!不知何故,在其中一個模板中,得到輸出的文本框名稱爲「文本框」,所以這似乎是它添加「.textbox」的原因。我不確定這是怎麼發生的,因爲到目前爲止我還沒有任何理由去觸摸這些文件。如果你想以此作爲答案,我會接受它。現在想知道如何將這些文件添加到文件中 – KSF

回答

1

默認情況下,TextBoxFor幫助程序使用內置模板生成HTML。您可以通過在project root\views\shared\editortemplates文件夾中創建文件來覆蓋默認設置。

因此,問題可能是由於存在一些自定義模板造成的。通常,您需要檢查名稱與數據類型匹配的文件(如string)或控件類型(如TextArea)。如果相應的模型屬性具有UIHint屬性,則其中指定的自定義文件也可以發揮作用。

相關問題