Запретить отправку формы, проверить записи с помощью Ajax и при наличии записей продолжить ASP.NET MVC

#javascript #jquery #asp.net-mvc-2

#javascript #jquery #asp.net-mvc-2

Вопрос:

В настоящее время я прослушиваю отправку формы в одном из моих представлений, и она проверяет наличие записей. Что я хочу сделать, так это если есть записи, позволяющие форме фактически отображать представление, а если нет, то просто показывать страницу ошибки. Очевидно, что «else», где предполагается код продолжения, пуст.. Есть идеи о том, как я могу это сделать?

Вот функция JS, которая фактически перехватывает и отправляет сообщения в AJAX.

     $('form#search-form').submit(function (evt) {
        $.ajax({
            type: 'POST',
            url: '<%: Url.Action("Details","SpecialtyTrack") %>',
            data: $(this).serialize(),
            success: function (response) {
                if (response.results == 0) {
                    $('#error').fadeOut('fast');
                    $("#error").fadeIn('slow');
                }
                else {
                    $('#error').hide();

                };

            },
            error: function (response) {
                alert(response);
            }
        });
        evt.preventDefault();

    });
  

и вот мой код контроллера:

     public ActionResult Details(string searchParameter)
    {

        var sP = this.spRepo.findSpecialtyTrack(searchParameter);
        try
        {
            var record = sP.FirstOrDefault();
            ViewData["directoryID"] = record.DirectoryArtItem.DirectoryCanvass.DirectoryEdition.DirectoryID;
            ViewData["directoryName"] = record.DirectoryArtItem.DirectoryCanvass.DirectoryEdition.Directory.Name;

            return View(sP);
        }
        catch (NullReferenceException)
        {

            return Json(new {
                results = 0
            });
        }


    }
  

Ответ №1:

Задайте ответ.StatusCode = 500 в вашем catch, и это вызовет обратный вызов с ошибкой в ajax-вызове jQuery. Затем вы можете обработать ошибку так, как хотите, где у вас есть это предупреждение.

 public ActionResult Details(string searchParameter)
{

    var sP = this.spRepo.findSpecialtyTrack(searchParameter);
    try
    {
        var record = sP.FirstOrDefault();
        ViewData["directoryID"] = record.DirectoryArtItem.DirectoryCanvass.DirectoryEdition.DirectoryID;
        ViewData["directoryName"] = record.DirectoryArtItem.DirectoryCanvass.DirectoryEdition.Directory.Name;

        return View(sP);
    }
    catch (NullReferenceException)
    {
        Response.StatusCode = 500;
        return Json(new {
            results = 0
        });
    }
}
  

Ответ №2:

Я бы решил это как 2 действия, одно как часть проверки / другое как запрос ajax, если это необходимо

 <% using Ajax.BeginForm("ValidateAction",new AjaxOptions{ UpdateId="HolderWhereSubmitButtonWillBe"}){
%>

validation page
<%}%>
  

ответ от вашего ValidateAction возвращается как частичное представление

 <div id="HolderWhereSubmitButtonWillBe">
here will be the ajax call code and button to submit via ajax(all as partail view send as reponse for validation
</div>
  

Также я бы добавил что-то вроде

if (!modelstate.isvalid) возвращает view()

просто чтобы убедиться