Как правило, я бы старался избегать использования JavaScriptResult
, так как он имеет тенденцию смешивать контент пользовательского интерфейса с контентом контроллера, что идет вразрез со всем шаблоном MVC.Если бы я делал то, что вы пытались выполнить, я бы вернул клиенту JsonResult
и затем выполнил бы блок кода на основе результата.Таким образом, если модель не проходит проверку, вы можете вернуть JsonResult
с результатом ошибки и узнать на клиенте, что проверка не удалась.Это может быть достигнуто следующим образом:
[HttpPost]
public JsonResult Example(ModelName model)
{
// Validate
if (!ModelState.IsValid)
{
return new JsonResult()
{
Data = new { success = false },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
// No validation errors, do stuff
return new JsonResult()
{
Data = new { success = true },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
Тогда клиентский код:
$.post('/Example', $('#form').serialize(), function (response) {
if (response.success) {
// Success, execute js code here
} else {
// Validation errors
}
}, "json");
Однако, если вам нужно пойти по маршруту JavaScriptResult
ивозникает ошибка проверки, я либо ничего не возвращаю, либо какой-нибудь javascript, который уведомит пользователя о том, что проверка не удалась:
[HttpPost]
public JavaScriptResult Example(ModelName model)
{
// Validate
if (!ModelState.IsValid)
{
return new JavaScript("alert("Validation Failed!")");
}
// No validation errors, do stuff
return new JavaScript("js to return here if validation passes");
}