【发布时间】:2009-12-19 01:01:40
【问题描述】:
我的模型对象有一个名为 SpecialProjectId 的 int 属性。该属性对应于一个选择框。我在选择框中使用默认选项。但是,当我使用默认值提交表单时,ModelState.isValid 一直为 false,因为默认选择选项具有 value="" 并且由于某种原因,默认绑定器在找到 "" 作为表单的值时未将 0 绑定到 SpecialProjectId字段 SpecialProjectId。下面是我能想到的所有代码。请帮忙。注意:我使用 asp.net mvc 2.0.0 和 System.ComponentModel.DataAnnotations 进行验证。
//我是如何创建选择框的
<%= Html.DropDownList("SpecialProjectId", "* Select One *") %>
//助手创建了什么
<select id="SpecialProjectId" name="SpecialProjectId">
<option value="">* Select One *</option>
<option value="1">sp</option>
<option value="3">extra special project</option>
</select>
//我的动作方法
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add([Bind(Exclude="Id, DateAudited")]AuditModel auditModel) {
try {
if (!ModelState.IsValid) {
return View("AuditForm", auditModel);
}
//...add audit code...
//我的模型对象
using System.ComponentModel.DataAnnotations;
using System.Collections.Generic;
using Iesi.Collections;
public class AuditModel
{
public virtual int Id {get; set;}
//NOT REQUIRED!!!//
public virtual int SpecialProjectId {get; set;}
[Required]
public virtual int AccountId {get; set;}
[Required]
public virtual DateTime DateReceived {get; set;}
}
【问题讨论】:
-
我对此的最终解决方案是使用 Nullable
版本,例如 int?、DateTime?、float?对于我所有的模型字段。一旦我切换到那个,我就不再收到“需要一个值的消息”。我还没有检查代码以确定,但我几乎可以肯定,当自动绑定代码运行时,它会在尝试将“”或 null 绑定到 int 或 float 时引发异常。让模型字段可以为空可以避免异常和 vauge 错误消息。现在,当表单中不存在 [Required] 字段时,我只会看到正常的“Field Blah is required”。
标签: asp.net-mvc binding