如何关闭MVC表单验证

时间:2012-12-08 16:45:50

标签: asp.net-mvc validation razor

我有数据优先设置,所以我的模型是由我的数据库中的实体框架生成的,没有默认的[Required]注释。我有一个包含三个字段的简单表格。一个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>
}

模型(由Framework生成):

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

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

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

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

[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)

现在它适用于编辑和创建Windows。 “ctype”与“calltype”没有冲突。

1 个答案:

答案 0 :(得分:0)

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

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

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