【问题标题】:How to turn off MVC form validation如何关闭 MVC 表单验证
【发布时间】:2012-12-08 16:45:50
【问题描述】:

我有一个数据优先的设置,所以我的模型是由我的数据库中的实体框架生成的,并且没有默认的 [必需] 注释。我有一个包含三个字段的简单表格。一个 ID 和两个 VARCHAR / 基于文本的字段。

无论我尝试什么,我都无法让 CRUD 表单停止验证。我在 Web.config 中禁用,我将 [ValidateInput(false)] 添加到控制器中的 Create() 方法,但没有效果。我将@Html.ValidationSummary 设置为false,

这是基本视图:

@using (Html.BeginForm()) {
@Html.ValidationSummary(false)

<fieldset>
    <legend>CallType</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.CALLTYPE)
    </div>
    <div class="editor-field">
        @Html.TextBox("calltype", "", new { style = "width: 50px;" })
        @Html.ValidationMessageFor(model => model.CALLTYPE) 
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.DESCRIPTION)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.DESCRIPTION)
        @Html.ValidationMessageFor(model => model.DESCRIPTION)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

模型(由框架生成):

public partial class CALLTYPES2
{
    public int ID { get; set; }
    public string CALLTYPE { get; set; }
    public string DESCRIPTION { get; set; }
}

即使我在每个字段中只插入一个字符,它仍然会显示:“值 'x' 无效” (我保留验证消息,以便查看发生了什么。)

我该怎么办?稍后我将如何验证这些字段 - 我可以将 [Required] 添加到模型生成的代码中吗?如果我从数据库中重新生成模型会怎样?

这与控制器中的模型状态有关吗?

[HttpPost]
    public ActionResult Create(CALLTYPES2 calltype)
    {
        if (ModelState.IsValid)
        {
            db.CALLTYPES2.Add(calltype);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(calltype);
}

不确定我缺少什么,我阅读的教程并没有提供太多启示。感谢您的回复,并为我的无知道歉。

更新

发现我的错误 - 方法 Create() 中的对象名称“calltype”与表单字段“calltype”的名称/ID 相同。我猜绑定器试图将字符串“calltype”绑定到对象“calltype”。将其重命名为:

public ActionResult Create(CALLTYPES2 ctype)

现在它可以在编辑和创建窗口中使用。 “ctype”与“calltype”不冲突。

【问题讨论】:

    标签: asp.net-mvc validation razor


    【解决方案1】:

    您忘记在表单中包含 ID 字段。您可以将其作为隐藏字段包含在内:

    @Html.HiddenFor(model => model.ID)
    

    现在表单提交时ID属性的值将被发送到服务器,默认模型绑定器不应该抱怨。

    【讨论】:

    • 感谢您的回复。但是添加隐藏字段没有任何影响。好吧,还没有 ID,所以我输入了一个默认值,但没有运气。我发现 Model.IsValid 不正确,并且传递的 calltype 对象在到达控制器时为 null。试图找出原因。似乎有些绑定问题?
    猜你喜欢
    • 2018-01-18
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2013-09-16
    • 1970-01-01
    相关资源
    最近更新 更多