2012-12-08 55 views
1

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

无论我尝试什么,我都无法获取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'无效” (我留下验证信息,以便我可以看到发生了什么)。

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

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

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

     return View(calltype); 
} 

不知道我失踪了什么,我看过的教程也没有多少亮点。感谢您的回应,并为我的无知道歉。

UPDATE

找到我的错误 - 在该方法中的对象名称“CALLTYPE”创建()是相同的表单字段“CALLTYPE”的名称/ ID。我想活页夹试图将字符串“calltype”绑定到对象“calltype”。将它重命名为:

public ActionResult Create(CALLTYPES2 ctype) 

现在它在编辑和创建Windows中均可用。 “ctype”与“calltype”不冲突。

回答

0

您忘记在您的表单中包含ID字段。你可以把它作为一个隐藏字段:

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

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

+0

感谢您的回复。但是,添加隐藏字段不会有任何影响。那么还没有ID,所以我把默认的,但没有运气。我发现Model.IsValid不是true,传入的calltype对象到达控制器时为null。试图找出原因。看起来像一些有约束力的问题? – CyMark