0

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

“一些包含数字 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 字段是必需的。'" 我不在代码中强加这些规则

4

3 回答 3

0

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

于 2013-08-06T18:47:05.667 回答
0

如果有人遇到这个问题,解决方法是使用 Html.EditorFor 如下:

首先:将验证属性 [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 属性。

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

于 2013-08-07T08:08:12.973 回答
0

使用可为空的 int/Int32。

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

或者

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

这适用于我的表格

于 2014-10-31T17:05:07.267 回答