Html.EditorFor 将 .textbox 添加到元素名称
Html.EditorFor adding .textbox to element name
我有一个项目,其中包含一个用于收集注册信息的简单表格。最近我一直致力于为项目添加本地化,因为所有显示给用户的文本都是硬编码的。我不确定发生了什么变化,但出于某种原因,现在当 Razor 使用最终成为文本框的 Html.EditorFor 方法呈现 HTML 元素时,元素的名称 属性 具有“.textbox”附加到它。
这打破了绑定,所以当我收到我的模型时,所有的文本值都是空的。这是我所看到的示例,Razor 代码:
<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" 的输入元素上。我生成了另一个输入 with.EditorFor,它具有电子邮件类型,并且没有对名称进行任何修改。
这种行为似乎也仅限于 Html.EditorFor,如果我 use.TextboxFor,它工作正常。
我已经能够通过在 Razor 中显式设置 @Name 属性 来使绑定工作,但这只会掩盖症状,我想避免在网站。
有没有人以前见过这种行为,或者知道解决方法?
默认情况下,TextBoxFor
助手使用内置模板生成 HTML。您可以通过在 project root\views\shared\editortemplates
文件夹中创建文件来覆盖默认值。
因此,问题可能是由于那里存在一些自定义模板引起的。通常,您需要检查名称匹配数据类型(例如 string
)或控件类型(例如 TextArea
)的文件。如果相应的模型 属性 上有 UIHint
属性,其中指定的自定义文件也可以发挥作用。
我有一个项目,其中包含一个用于收集注册信息的简单表格。最近我一直致力于为项目添加本地化,因为所有显示给用户的文本都是硬编码的。我不确定发生了什么变化,但出于某种原因,现在当 Razor 使用最终成为文本框的 Html.EditorFor 方法呈现 HTML 元素时,元素的名称 属性 具有“.textbox”附加到它。
这打破了绑定,所以当我收到我的模型时,所有的文本值都是空的。这是我所看到的示例,Razor 代码:
<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" 的输入元素上。我生成了另一个输入 with.EditorFor,它具有电子邮件类型,并且没有对名称进行任何修改。
这种行为似乎也仅限于 Html.EditorFor,如果我 use.TextboxFor,它工作正常。
我已经能够通过在 Razor 中显式设置 @Name 属性 来使绑定工作,但这只会掩盖症状,我想避免在网站。
有没有人以前见过这种行为,或者知道解决方法?
默认情况下,TextBoxFor
助手使用内置模板生成 HTML。您可以通过在 project root\views\shared\editortemplates
文件夹中创建文件来覆盖默认值。
因此,问题可能是由于那里存在一些自定义模板引起的。通常,您需要检查名称匹配数据类型(例如 string
)或控件类型(例如 TextArea
)的文件。如果相应的模型 属性 上有 UIHint
属性,其中指定的自定义文件也可以发挥作用。