отображение div для отображения ошибки действия

#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 реализуйте обработчик успеха и обработчик ошибок.