对于int model属性,自动绑定不将空字符串转换为0

时间:2009-12-18 00:13:53

标签: asp.net-mvc binding

我的模型对象有一个名为SpecialProjectId的int属性。该属性对应于选择框。我在选择框中使用默认选项。但是,当我提交具有默认值的表单时,ModelState.isValid保持为false,因为默认的select选项具有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;} 
}  

3 个答案:

答案 0 :(得分:2)

这不是为什么“”没有变成0的答案,而是一种首先避免这个问题的方法。

//手动将值为0的“Select One”添加到SelectList

List<SpecialProject> specialProjectsForSelectBox = new List<SpecialProject>();
specialProjectsForSelectBox.Add(new SpecialProject(0, "* Select One *"));
specialProjectsForSelectBox.AddRange(specialProjectBusinessLogic.FindAllActive());

答案 1 :(得分:0)

为什么不给空选项一个显式值“0”?

编辑:我的不好,我错过了你用助手创建它

答案 2 :(得分:0)

“当它找到”“作为表单字段的值”

时,不将0绑定到SpecialProjectId

我认为这是预期的行为。

您隐式告诉模型绑定器将此SpecialProjectId绑定到int。它不能,因此您的模型状态无效。

您想将int设置为可空的int吗?那么你的模型将是有效的。

将其视为“无法绑定”无效而非“验证失败”无效。

相关问题