Ненавязчивая проверка не работает на некоторых элементах - PullRequest
4 голосов
/ 03 марта 2012

У меня очень странная проблема с ненавязчивой проверкой.

У меня есть модель с атрибутом Required на три свойства перемешивания. Я использую TextBoxFor для двух полей и TextAreaFor для последнего. Проверка работает на TextArea, но НЕ на полях ввода. Глядя на источник, я вижу, что атрибуты, которые добавляет проверка, находятся не на входах, а на текстовом поле. Кроме того, если я ввожу данные в текстовое поле и отправляю их, они отправляют сообщения, и привязка модели MVC ОБЯЗАТЕЛЬНО устанавливает для ModelState.IsValid значение false, а ValidationSummary показывает поля.

Что может привести к тому, что проверка не будет работать с элементами ввода?

Модель:

    public class TestModel : IEmail {
        public string BCCAddresses {
            get;
            set;
        }

        [Required]
        public string BodyFormat {
            get;
            set;
        }

        public string CCAddresses {
            get;
            set;
        }

        [Required]
        public string FromAddress {
            get;
            set;
        }

        [Required]
        public string SubjectLineFormat {
            get;
            set;
        }
  }

Вид:

@section head {
    <script src="@Url.Content( "~/Scripts/jquery.1.7.1.min.js" )" type="text/javascript"></script>
    <script src="@Url.Content( "~/Scripts/jquery.validate.min.js" )" type="text/javascript"></script>
    <script src="@Url.Content( "~/Scripts/jquery.validate.unobtrusive.min.js" )" type="text/javascript"></script>

}


@{
    Html.EnableClientValidation();
    Html.EnableUnobtrusiveJavaScript();
}

            @using ( Html.BeginForm( "Edit", "Email", FormMethod.Post ) ) {
                <table>
                    <tr>
                        <td>From</td>
                        <td>@Html.TextBoxFor( x => x.FromAddress, new { style = "width: 500px;" } )</td>
                    </tr>
                    <tr>
                        <td>CC</td>
                        <td>@Html.TextBoxFor( x => x.CCAddresses, new { style = "width: 500px;" } )</td>
                    </tr>
                    <tr>
                        <td>BCC</td>
                        <td>@Html.TextBoxFor( x => x.BCCAddresses, new { style = "width: 500px;" } )</td>
                    </tr>
                    <tr><td colspan="2">&nbsp;</td></tr>
                    <tr>
                        <td colspan="2">Subject Line</td>
                    </tr>
                    <tr>
                        <td colspan="2">@Html.TextBoxFor( x => x.SubjectLineFormat, new { style = "width: 500px;" } )</td>
                    </tr>
                    <tr><td colspan="2">&nbsp;</td></tr>
                    <tr>
                        <td colspan="2">Body Form</td>
                    </tr>
                    <tr>
                        <td colspan="2">@Html.TextAreaFor( x => x.BodyFormat, new { style = "width: 500px; height: 200px" } )</td>
                    </tr>
                    <tr><td colspan="2">&nbsp;</td></tr>
                    <tr>
                        <td colspan="2">
                            <input id="ApplyChanges" type="submit" class="NavigationButton"  value="Save Changes" /> 
                            <input id="CancelChanges" type="button" class="NavigationButton" value="Cancel Changes" />
                        </td>
                    </tr>
                    <tr>
                        <td colspan="2">
                            @Html.ValidationSummary()
                        </td>
                    </tr>
                    <tr><td colspan="2">&nbsp;</td></tr>
                </table>
            }

Источник браузера:

<form action="/url" method="post">
                <table>
                    <tbody><tr>
                        <td>From</td>
                        <td><input style="width: 500px;" id="FromAddress" name="FromAddress" value="" type="text"></td>
                    </tr>
                    <tr>
                        <td>CC</td>
                        <td><input style="width: 500px;" id="CCAddresses" name="CCAddresses" value="" type="text"></td>
                    </tr>
                    <tr>
                        <td>BCC</td>
                        <td><input style="width: 500px;" id="BCCAddresses" name="BCCAddresses" value="" type="text"></td>
                    </tr>
                    <tr><td colSpan="2">&nbsp;</td></tr>
                    <tr>
                        <td colSpan="2">Subject Line</td>
                    </tr>
                    <tr>
                        <td colSpan="2"><input style="width: 500px;" id="SubjectLineFormat" name="SubjectLineFormat" value="" type="text"></td>
                    </tr>
                    <tr><td colSpan="2">&nbsp;</td></tr>
                    <tr>
                        <td colSpan="2">Body Form</td>
                    </tr>
                    <tr>
                        <td colSpan="2"><textarea style="width: 500px; height: 200px;" id="BodyFormat" cols="20" rows="2" name="BodyFormat" data-val-required="The BodyFormat field is required." data-val="true"></textarea></td>
                    </tr>
                    <tr><td colSpan="2">&nbsp;</td></tr>
                    <tr>
                        <td colSpan="2">
                            <input id="ApplyChanges" class="NavigationButton" disabled="disabled" value="Save Changes" type="submit"> 
                            <input id="CancelChanges" class="NavigationButton" value="Cancel Changes" type="button">
                        </td>
                    </tr>
                    <tr>
                        <td colSpan="2">
                            <div class="validation-summary-valid" data-valmsg-summary="true"><ul><li style="display: none;"></li>
</ul></div>
                        </td>
                    </tr>
                    <tr><td colSpan="2">&nbsp;</td></tr>
                </tbody></table>
</form>

1 Ответ

1 голос
/ 03 марта 2012

Я провел быстрый тест с почти вашим идентичным образцом кода, и проверка работала нормально с моей стороны.Я бы начал раздеваться, пока вы не найдете то, что противоречит вашей проверке.

Для справки вот как выглядел мой тест:

Контроллер :

public ActionResult Index()
{
    var model = new TestModel();
    return View("Index", model);
}

Используемая мной тестовая модель не наследовалаиз "IEmail":

public class TestModel
{
    public string BCCAddresses
    {
        get;
        set;
    }

    [Required]
    public string BodyFormat
    {
        get;
        set;
    }

    public string CCAddresses
    {
        get;
        set;
    }

    [Required]
    public string FromAddress
    {
        get;
        set;
    }

    [Required]
    public string SubjectLineFormat
    {
        get;
        set;
    }
}

И мое мнение было в значительной степени идентично.Обратите внимание, что я не реализовал раздел для библиотек сценариев, а непосредственно ссылался на них в представлении w.EG:

<script src="@Url.Content("~/Scripts/jquery.1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

Надеюсь, это поможет.

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