Как отключить проверку в действии HttpPost в ASP.NET MVC 3? - PullRequest
6 голосов
/ 18 мая 2011

У меня есть Create-View вроде этого ...

<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>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(null, new { @class = "validation" })
    ...
    <input class="cancel" type="submit" value="OK" />
    ...
    <input name="submit" type="submit" value="Save" />
}

... и соответствующее действие контроллера:

[HttpPost]
public ActionResult Create(string submit, MyViewModel myViewModel)
{
    if (submit != null) // true, if "Save" button has been clicked
    {
        if (ModelState.IsValid)
        {
            // save model data
            return RedirectToAction("Index");
        }
    }
    else // if "OK" button has been clicked
    {
        // Disable somehow validation here so that
        // no validation errors are displayed in ValidationSummary
    }

    // prepare some data in myViewModel ...

    return View(myViewModel); // ... and display page again
}

Я обнаружил, что могу отключить клиент-подтверждение стороны путем установки class="cancel" на кнопку «ОК».Это работает нормально.

Однако проверка на стороне сервера все же происходит.Есть ли способ отключить его в действии контроллера (см. Блок else в действии «Создать» выше)?

Спасибо за помощь!

Ответы [ 4 ]

7 голосов
/ 18 мая 2011

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

ModelState.Remove("Propertyname");

Чтобы скрыть сообщения об ошибках, вы можете использовать

ModelState.Clear();

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

<input type="reset" value="Reset Form">
4 голосов
/ 18 мая 2011

Поэтому, если в вашей строке отправки ничего нет, вы хотите, чтобы она игнорировала проверку правильности состояния модели и предполагала, что это так.

Тем не менее, он все еще идет вперед и проверит вашу проверку и появится на стороне клиента через сводку проверки.

Если вас действительно не волнуют ошибки в этом случае, попробуйте

ModelState.Clear()

и удалите из него все ошибки.

2 голосов
/ 18 мая 2011

Проверка на стороне сервера должна быть в вашем классе MyViewModel.Можете ли вы использовать другой класс, который не реализует проверку?Аннотации данных в ViewModel отвечают за установку для ModelState.IsValid значения false.

1 голос
/ 18 мая 2011

Теперь у меня только что появилась идея:

...
else // if "OK" button has been clicked
{
    ModelState.Clear();
}
...

Действительно, я больше не получаю сообщения в ValidationSummary. Есть ли у этого недостаток или нежелательный побочный эффект? По крайней мере, я не вижу проблемы в данный момент ...

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