Проверка данных ASP.NET MVC - выделите строку таблицы и текстовые поля - PullRequest
4 голосов
/ 09 июня 2009

В ASP.NET MVC View у меня есть несколько флажков, один для адреса электронной почты и один для телефона. Я хочу убедиться, что по крайней мере один отмечен (оба могут быть проверены, поэтому переключатель не идеален), и если ни один из них не выделен, выделите строку красной рамкой, как текстовое поле с функцией проверки ... 1001 *

У меня есть другие поля, которые корректно проверяются, и CSS меняется, когда возникает проблема с текстовыми полями и текстовыми областями соответственно. Приведенный ниже код отображает сообщение, информирующее пользователя, что он должен указать предпочтения контакта, но не выделяет строку как имеющую проблему ...

Снимок экрана alt text

VIEW

<table width="100%">
    <tr>
        <td>
            <label>
                How would you like us to contact you?
            </label>
        </td>
    </tr>
    <tr id="pref_row">
        <td>
            <span class="bold-text">Email: </span>&nbsp;
            <%=Html.CheckBox("EmailDesired")%>
            &nbsp; &nbsp; <span class="bold-text">Phone: </span>&nbsp;
            <%=Html.CheckBox("PhoneDesired")%>
        </td>
    </tr>
</table>

CONTROLLER

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(ContactUs contactus)
{
    ContactUsService svc = new ContactUsService();
    // Validation
    if (!contactus.EmailDesired && !contactus.PhoneDesired)
        ViewData.ModelState.AddModelError("pref_row", "Please specify a contact preference (phone and/or email)!");

    if (ViewData.ModelState.IsValid)
    {
        MessageModel msg = svc.SendRequest(contactus);
        return RedirectToAction("Index", msg);
    }
    else
    {
        return View();
    }
}

1 Ответ

4 голосов
/ 09 июня 2009

Когда HtmlHelper отображает себя, он проверяет, есть ли какой-либо элемент в словаре ModelState, который имеет тот же ключ, что и сам помощник. в этом случае элемент управления будет отображаться с классом атрибута, равным «input-validation-error», который определен в файле css.
Таким образом, стиль будет применен только к визуализированным элементам управления вводом.

Это мое решение:

<table width="100%">
    <tr>
        <td>
            <label>
                How would you like us to contact you?
            </label>
        </td>
    </tr>
    <tr class="<%=ViewData.ModelState["pref_row"]!= null ? "input-validation-error":"" %>">
        <td>
            <span class="bold-text">Email: </span> 
            <%=Html.CheckBox("EmailDesired")%>
                <span class="bold-text">Phone: </span> 
            <%=Html.CheckBox("PhoneDesired")%>
        </td>
    </tr>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...