#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()
просто чтобы убедиться