Передайте пустую строку как свойство типа null - PullRequest
1 голос
/ 04 февраля 2012

Моя модель:

[DisplayName("Height")]
public int? Height { get; set; }

[DisplayName("Width")]
public int? Width { get; set; }

Вид:

<%= Html.TextBoxFor(x => x.Width) %>
<%= Html.TextBoxFor(x => x.Height) %>

Действие:

if (ModelState.IsValid)
    SaveSettings(model);

Когда пустые строки передаются из вида, ModelState имеет значение false,но мне нужны пустые строки для правильного ввода, так что null будут переданы и ModelState.IsValid будет истинным.Что я могу добавить к представлению, чтобы добавить эту логику?Или, может быть, любое другое решение?Большое спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2012

Есть обходные пути, такие как использование строкового свойства в ViewModel и использование валидатора RegEx, чтобы убедиться, что это число. Регулярное выражение не должно запускаться на пустом входе. Затем, когда вы переходите от ViewModel к Model, вам нужно выполнить условие для строкового значения, например

 var m = new Model();
 m.Property = !String.IsNullOrEmpty(this.Property)? int.parse(this.Property) as int?:null;
0 голосов
/ 04 февраля 2012

int? (Nullable<int>) никогда не сможет принять пустую строку. И пустая строка не является ни null, ни значением int (которые являются требованиями Nullable<int>).

Если вы хотите перехватить это поведение, вы можете создать свой собственный пользовательский механизм связывания моделей, реализовав IModelBinder или подкласс DefaultModelBinder. Делая это, вы можете установить значение пустой строки, равное null (или некоторое магическое число, но я бы предпочел null).

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