автоматическое связывание не преобразует пустую строку в 0 для свойства модели int - PullRequest
1 голос
/ 18 декабря 2009

Мой объект модели имеет свойство int с именем SpecialProjectId. Это свойство соответствует окну выбора. Я использую опцию по умолчанию в поле выбора. Однако, когда я отправляю форму со значением по умолчанию, ModelState.isValid остается ложным, потому что опция выбора по умолчанию имеет значение = "", и по какой-то причине связыватель по умолчанию НЕ привязывает 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 ]

2 голосов
/ 18 декабря 2009

Это не ответ на вопрос, почему "" не превращается в 0, а способ избежать этой проблемы.

// Вручную добавить «Select One» со значением 0 в список SelectList

List<SpecialProject> specialProjectsForSelectBox = new List<SpecialProject>();
specialProjectsForSelectBox.Add(new SpecialProject(0, "* Select One *"));
specialProjectsForSelectBox.AddRange(specialProjectBusinessLogic.FindAllActive());
0 голосов
/ 18 декабря 2009

"НЕ привязывать 0 к SpecialProjectId, когда он находит" "в качестве значения для поля формы"

Я думаю, что это ожидаемое поведение.

Вы неявно указываете связующему модели связывать этот SpecialProjectId с int. Не может, поэтому ваше состояние модели недействительно.

Вы хотите установить для int значение null ?. Тогда ваша модель будет действительна.

Думайте об этом как о «невозможно связать» недействительным, а не как «сбой проверки».

0 голосов
/ 18 декабря 2009

Почему бы не дать пустому параметру явное значение "0"?

РЕДАКТИРОВАТЬ: мой плохой, я пропустил, что вы создали его с помощником

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...