验证错误 - 字段Int32必须是数字 - 字符串属性

时间:2013-08-06 17:28:56

标签: asp.net-mvc

我有一个有趣的问题而且我找不到原因。 在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字段是必需的。'” 我不是在强加这些规则的代码中

3 个答案:

答案 0 :(得分:0)

尝试使用[DataType(DataType.MultilineText)]标记属性。也许这会使TextAreaFor帮助器显而易见。

答案 1 :(得分:0)

如果有人遇到过这个问题,解决方法是使用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文件夹中,创建一个以model属性名称命名的局部视图。 在我的例子中是:akcija.cshtml

在此视图中应转发model属性的值,并且必须包含定义视图的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属性。

我希望这会帮助某人

答案 2 :(得分:0)

使用可空的int / Int32。

public int? mobilequantity {get;组; }

公共Int32? mobilequantity {get;设置;}

适用于我的表单