【问题标题】:Validation error - The field Int32 must be a number - on string property验证错误 - 字段 Int32 必须是数字 - 在字符串属性上
【发布时间】:2014-11-01 01:05:07
【问题描述】:

我有一个有趣的问题,但我没有找到原因。 在 asp.net MVC 应用程序中,我有一个保存一些简单信息的表单。除了一个之外,所有字段都可以整齐地存储。此字段(字符串)返回验证错误“Int32 字段必须是数字”,但前提是文本中的句子包含单个数字。例如,如果句子如下: “一些包含数字 3 的简单句子”我会得到一个验证错误 - “Int32 字段必须是一个数字”,如果同一个句子转换为:

“一些包含数字 30 的简单句子”或“一些包含 30% 的简单句子” - 没有错误

来自模型的字段属性:

    [Display(Name = "Some name")]
    [StringLength(500, ErrorMessage = "You can enter up to 500 characters.")]
    public string Akcija { get; set; } 

在该字段旁边,我有一个(字符串)字段具有相同的属性特征,并且工作正常。

视图剪辑:

<div>

            @Html.TextAreaFor(m => m.Akcija, new { style = "width:500px; height:100px;" })
            @Html.ValidationMessageFor(m => m.Akcija)

        </div>

不可能比这更简单,但问题就在这里。

你有什么建议吗?

编辑:

如果我继续尝试保存更改,无论验证错误如何,它都会保存到数据库中。在我看来,这是一个 JavaScript 验证错误或错误

编辑 2 - 生成的 HTML:

            <textarea cols="20" data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." id="Akcija" name="Akcija" rows="2" style="width:500px; height:100px;">

Web aplikacije i siteovi 3 sa 30% sniženja

我不知道它来自哪里-这个属性“data-val-number =”字段Int32必须是一个数字。 '" 和 " data-val-required = "Int32 字段是必需的。'" 我不在代码中强加这些规则

【问题讨论】:

  • 你能发布生成的 HTML
  • 您确定您使用的是正确的型号吗?
  • 您能否再次检查页面是否绑定到正确的模型(其中 Akcija 是一个字符串)以及是否部署了与字符串 Akcija 关联的编译代码?
  • ...非常确定:)。因为这个表格只有一个模型
  • 使用此模型正确存储和恢复所有字符串

标签: asp.net-mvc


【解决方案1】:

尝试使用[DataType(DataType.MultilineText)] 标记属性。也许这会让 TextAreaFor 助手明确。

【讨论】:

  • 我想我必须将 Html.EditorFor 与 [DataType (DataType.MultilineText)] 一起使用,并为“Akcija”编写一个模板,为什么它可能很复杂:)。感谢大家的帮助和时间
  • 嗯,如何将TextBoxFor 助手与[DataType(DataType.MultilineText)] 属性结合使用,就像这里的解决方案stackoverflow.com/questions/4927003/…
  • 如果你仔细观察你会发现它是 HtmlEditorFor。 TextBoxFor 不能是多行
  • ...而且EditorFor不能应用css,除非槽模板
【解决方案2】:

如果有人遇到过这个问题,解决方法是使用 Html.Editor 来了解它是如何遵循的:

首先:将验证属性 [DataType (DataType.MultilineText)] 添加到模型属性 所以模型属性看起来像这样:

    [Display(Name = "Some name")]
    [StringLength(500, ErrorMessage = "You can enter up to 500 characters.")]
    [DataType(DataType.MultilineText)]
    public string Akcija { get; set; }

其次:为 Html.EditorFor 制作模板。 在文件夹 Views/Shared/EditorTemplates 中创建模板 - 如果没有文件夹 EditorTemplates,则创建。

在文件夹 EditorTemplates 中创建一个以模型属性名称命名的局部视图。 就我而言,它是:akcija.cshtml

在这个视图中应该转发模型属性的值,并且您必须包含定义视图字段的 HTML,以便在我的例子中,模板看起来像这样:

@model System.String

@if(!string.IsNullOrEmpty(Model))
{
    <textarea name="Akcija" style="width:500px;height:100px;">@Model.ToString() </textarea>
}
else
{
<textarea name="Akcija" style="width:500px;height:100px;">@Model</textarea>
}

第三在您的视图中更改 Html.EditorFor 中的 Html.TextAreaFor 并引用您的模板。在我的例子中,Html.EditorFor 现在看起来像这样:

<div>
   @Html.EditorFor(m => m.Akcija, "akcija")
   @Html.ValidationMessageFor(m => m.Akcija)
</div>

就是这样,问题解决了。

注意:在命名模板和模板中的对象以及模板本身时,请注意命名约定。请注意,我的模板是用小写字母命名的,并且在 html 模板中没有 html 对象的 id 属性。

我希望这会对某人有所帮助

【讨论】:

    【解决方案3】:

    使用可为空的 int/Int32。

    公共整数?移动数量 { 得到;放; }

    公共 Int32?移动数量 {get;设置;}

    适用于我的表单

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-22
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多