Html.ValidationSummary всегда показывает - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть представление, в котором есть пара обязательных полей - однако сообщение ValidationSummary должно срабатывать, когда пользователь нажимает «Добавить», а не при загрузке страницы.

Я пробовал ссылку ниже, но это приводит кValidationSummary полностью исчезает ...

Ошибки проверки бритвы MVC, отображаемые при загрузке страницы, когда данные не были опубликованы

public ActionResult Index(ParticipantViewModel p)
    {
        if (p.ClientName != null)
        {
                string[] split = p.ClientName.Split(',');

                p.ClientName = split[0];
                p.ClientConn = split[1];
                d.Connection.ConnectionString = p.ClientConn; 

                var prt = d.Participants.Where(s => s.Id == p.Id).FirstOrDefault();

                if (prt != null)
                {
                    p.FirstName = prt.FirstName;
                    p.LastName = prt.LastName;
                    p.PayrollNo = prt.PayrollNo;
                    p.Id = prt.Id;
                }

                //ModelState.Clear();
                return View(p);
        }
        else
        {

            return RedirectToAction("SearchParticipants");
        }
    }

Код в представлении: -

@Html.ValidationSummary("", new { @class = "validation-summary-valid text-danger" })
@using (Html.BeginForm("Add", "Participants", FormMethod.Post, new {@class = "form-horizontal", role =""}))
{
  @Html.AntiForgeryToken()
  <table class="table">
    <tr>
        <th>@Html.DisplayNameFor(model => model.FirstName)</th>
        <th>@Html.DisplayNameFor(model => model.LastName)</th>
        <th>@Html.DisplayNameFor(model => model.PayrollNo)</th>
        <th>@Html.DisplayNameFor(model => model.TransDesc)</th>
        <th>@Html.DisplayNameFor(model => model.Points)</th>
        <th>@Html.DisplayNameFor(model => model.Actions)</th>
    </tr>
    <tr>
        <td>@Html.DisplayFor(model => model.FirstName)</td>
        <td>@Html.DisplayFor(model => model.LastName)</td>
        <td>@Html.DisplayFor(model => model.PayrollNo)</td>
        <td>@Html.TextBoxFor(model => model.TransDesc)</td>
        <td>@Html.TextBoxFor(m => m.Points, new { onkeydown = "return ValidateNumber(event);"})</td>
        <td>@Html.EnumDropDownListFor(model => model.Actions)</td>
    </tr>
  </table>

    if (Model.FirstName != null)
    {
        <div class="form-actions no-color">
            <input type="submit" value="Add" class="btn btn-primary"/>
        </div>
    }
}
@section Scripts {

<script type="text/javascript" language="javascript">
    function ValidateNumber(e) {
        var evt = (e) ? e : window.event;
        var charCode = (evt.keyCode) ? evt.keyCode : evt.which;
        if (charCode > 31 && (charCode < 48 || charCode > 57) && (charCode < 96 || charCode > 105))
        {
            return false;
        }
        return true;
    };
</script>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
}

Site.Css

.validation-summary-valid
{
display:none;
}

Снимок экрана просмотра без нажатия кнопки Добавить: -

View looks like this Чего мне не хватает?

1 Ответ

0 голосов
/ 18 февраля 2019

Вы хотите, чтобы этот проверочный текст отображался только при отправке данных, поэтому в вашем сценарии он будет работать только в том случае, если текущий метод HTTP-запроса не является запросом GET:

@if (Request.HttpMethod != "GET") {
    Html.ValidationSummary("", new { @class = "validation-summary-valid text-danger" });
}

Это исходит из опыта (не воспринимайте это как непогрешимый факт), но, насколько это возможно, лучше вообще ничего не рендерить, когда вы знаете, что вам это не нужно, вместо того, чтобы рендерить это, а затем скрыватьэто с помощью CSS (что, если вы повторно используете код? изменения класса? зачем предоставлять информацию о проверке тому, кто не сделал POST?) ?

...