ModelState.IsValid false для пустого строкового поля - PullRequest
1 голос
/ 08 февраля 2012

В полях Моя модель принимаются цифры и пустая строка:

[DisplayName("Height")]
[RegularExpression (@"^\d*$", ErrorMessage="Height must be a number or left out   blank")]
public string Height { get; set; }

[DisplayName("Width")]
[RegularExpression(@"^\d*$", ErrorMessage = "Height must be a number or left out blank")]
public string Width { get; set; }

Мой вид:

<%= Html.LabelFor(x => x.Width) %>:
<%= Html.TextBoxFor(x => x.Width) %>

<%= Html.LabelFor(x => x.Height) %>:
<%= Html.TextBoxFor(x => x.Height) %>

В действии контроллера:

[HttpPost]

public ActionResult Edit(MyModeltype model)
{
    model.Width = String.IsNullOrEmpty(model.Width) ? "" : model.Width; //NEEDED?
    model.Height = String.IsNullOrEmpty(model.Height) ? "" : model.Height; //NEEDED?

    if (ModelState.IsValid)
        SaveSettings(model);

    return View("SomeView");
}

Когда я предоставляю пустоетекстовые поля, Model.Width и .Height передаются как пустые значения, а ModelState.IsValid имеет значение false.Мне просто нужно пропустить пустую строку.Опуская атрибут regex, та же проблема, так что это не регулярное выражение.Спасибо!

Ответы [ 2 ]

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

Попробуйте добавить атрибут DisplayFormat в свойства вашей модели:

[DisplayFormat(ConvertEmptyStringToNull = false)]
[DisplayName("Height")]
[RegularExpression (@"^\d*$", ErrorMessage="Height must be a number or left out   blank")]
public string Height { get; set; }

[DisplayFormat(ConvertEmptyStringToNull = false)]
[DisplayName("Width")]
[RegularExpression(@"^\d*$", ErrorMessage = "Height must be a number or left out blank")]
public string Width { get; set; }

Это позволит убедиться, что пустые значения текстового поля не преобразуются в NULL.

В качестве альтернативы, вы можете явно определить ваши получателии сеттеры для преобразования нулей в пустые строки:

private string _width;
public string Width
{
    get { return _width ?? string.Empty; }
    set { _width = value ?? string.Empty; }
} 
0 голосов
/ 08 февраля 2012

Я не вижу, чтобы вы отображали сообщение об ошибке в вашем представлении. Так что это может быть причиной проблемы, хотя я не уверен. В любом случае попробуйте это и посмотрите, работает ли оно:

<%= Html.LabelFor(x => x.Width) %>:
<%= Html.TextBoxFor(x => x.Width) %>
<%= Html.ValidationMessageFor(x => x.Width) %>

<%= Html.LabelFor(x => x.Height) %>:
<%= Html.TextBoxFor(x => x.Height) %>
<%= Html.ValidationMessageFor(x => x.Height) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...