我有一个数据优先的设置,所以我的模型是由我的数据库中的实体框架生成的,并且没有默认的 [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>
}
模型(由框架生成):
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”不冲突。