#c# #jquery #asp.net-mvc
#c# #jquery #asp.net-mvc
Вопрос:
Как я могу показывать div с информацией всякий раз, когда возникает исключение при выполнении моего действия?
Вот что у меня есть на данный момент:
<div id="dvErrorMsg">
<a href="#" class="close">[x]</a>
<p>
<label id="errorMessage">
</label>
</p>
</div>
<script type="text/javascript">
$(function () {
$("#click_here").click(function (event) {
event.preventDefault();
$("#dvErrorMsg").slideToggle();
});
$("#dvErrorMsg a").click(function (event) {
event.preventDefault();
$("#dvErrorMsg").slideUp();
});
});
</script>
И у меня есть это действие в моем контроллере:
public ActionResult Validatecall()
{
//if any exeption happen show div with the custom error
}
Как я могу перехватить любое исключение и отправить сообщение обратно в ответе AJAX?
Ответ №1:
В этом случае вы можете попробовать вернуть JavaScriptResult, который укажет вашему div на расширение:
public ActionResult Validatecall()
{
ActionResult resu<
try
{
// do whatever
}
catch (Exception)
{
result = JavaScript("$('#dvErrorMsg').show();$('#errorMessage').val(/* Put exception message here*/")");
}
return resu<
}
Как правило, я бы не рекомендовал использовать этот способ взаимодействия с представлением, поскольку теперь вы вводите зависимость в контроллер от самого представления, как описано здесь . Я предложил это как способ сделать это, поскольку я не знаю точно, как вы вызываете это действие.
Предполагая, что вы вызываете это действие с помощью ajax-вызова, подобного post, я бы вернул JsonResult, указывающий, произошло ли исключение, и передал сообщение об ошибке обратно таким образом:
$.post("urltoaction", function (result) {
if (result.success)
{
// do whatever
}
else
{
//exception occurred show errors
$('#dvErrorMsg').show();
$('#errorMessage').val(result.exceptionMsg);
}
});
Теперь вот код контроллера:
public ActionResult Validatecall()
{
ActionResult resu<
try
{
// do whatever
}
catch (Exception e)
{
result = new JsonResult()
{
Data = new { success = false, exceptionMsg = e.Message },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
return resu<
}
Комментарии:
1. Я вызываю действие, используя Html. ActionLink, я хочу знать, как это сделать с помощью ActionLink. Спасибо
2. @Pedro de La Cruz — Тогда используйте первый пример в моем ответе, где вы возвращаете обратно javascript.
3. как насчет предложения Билли Маккафферти?
4. @Pedro de La Cruz — Исходя из вашего сценария и того, что вы хотите сделать, я бы сказал, что это тот случай, когда использование JavaScriptResult допустимо. Просто помните, что это инструмент, который нужно держать в заднем кармане, а не готовое решение.
Ответ №2:
try {
... whatever
} catch (Exception $e) {
$('errorMessage').html($e);
}
Комментарии:
1. это всего лишь javascript. вопрос касается взаимодействия представления и контроллера.
2. @nathangonzalez: вопрос был отредактирован, чтобы иметь смысл, до этого было возможно, что спрашивающий спрашивал, как справиться с этим в javascript или на стороне сервера, было невозможно сказать
3. @NickLarsen, а, теперь я это понимаю. я предположил, что редактирование было просто обычным форматом кода. я не понизил голос, но это, по крайней мере, не отвечает на текущую редакцию вопроса.
4. я вызываю представление, используя ссылку действия, а не ajax-вызов!!
5. На стороне сервера я оставлю код реальным пользователям Java. С архитектурной точки зрения это может быть хорошим местом для использования кодов ответа HTTP. В коде вашего сервера отправьте код ответа 200 (который является поведением по умолчанию) с успешными результатами и отправьте код ответа 4xx (независимо от того, что применимо, страница не существует, неудачный вызов и т.д.) С вашим ответом в json. Затем в фактическом вызове на стороне javacript реализуйте обработчик успеха и обработчик ошибок.