Вам нужно будет вернуть несколько фрагментов информации для вашего ответа. К счастью, вы можете легко сделать это с помощью JSON, и jQuery автоматически обработает это за вас, если вы укажете, что тип ответа — json. Объект, который вы получаете в своей функции обратного вызова ajax, будет содержать все необходимые вам данные в виде различных свойств.
Я бы предложил взять за привычку возвращать код состояния «успех» или «неудача» при каждом вызове ajax и вместе с ним набор ошибок. Дополнительную информацию см. в этом замечательном сообщении в блоге. на что я имею в виду.
Причина этого в том, что вызов ajax всегда будет в основном «успешным», если только сервер фактически не может обработать запрос и не вернет код состояния http с ошибкой. Если результатом запроса является что-то вроде ошибки проверки, но сервер все равно возвращает какой-то текстовый ответ, то вызов ajax все равно считается успешным, даже несмотря на то, что операция приложения не удалась.
Итак, если в вашем методе действия вместо возврата ваших html-данных в результате действия вы вернули такой объект:
public class AjaxResponse
{
/// <summary>
/// Initializes a new instance of the <see cref="AjaxResponse"/> class.
/// This creates an AjaxResponse that by default indicates SUCCESS.
/// </summary>
public AjaxResponse()
{
Success = true;
Data = new List<object>();
}
/// <summary>
/// Initializes a new instance of the <see cref="AjaxResponse"/> class.
/// This creates an AjaxResponse that indicates FAILURE.
/// </summary>
/// <param name="exception">The exception.</param>
public AjaxResponse(Exception exception)
: this()
{
Success = false;
Errors = new [] { exception.Message };
}
/// <summary>
/// Initializes a new instance of the <see cref="AjaxResponse"/> class.
/// This creates an AjaxResponse that indicates SUCCESS.
/// </summary>
/// <param name="data">The data.</param>
public AjaxResponse(object data)
: this()
{
Data = data;
}
/// <summary>
/// Gets or sets a value indicating whether this <see cref="AjaxResponse"/> is success.
/// </summary>
/// <value><c>true</c> if success; otherwise, <c>false</c>.</value>
public bool Success
{
get; set;
}
/// <summary>
/// Gets or sets the data.
/// </summary>
/// <value>The data.</value>
public object Data
{
get; set;
}
/// <summary>
/// Gets or sets the errors.
/// </summary>
/// <value>The errors.</value>
public string[] Errors
{
get; set;
}
}
Это преобразуется в объект javascript со свойствами «.Success», «.Data» и «.Errors».
Итак, если ваш код проверки заполнил массив Errors всеми ошибками проверки, вашей функции обратного вызова ajax было бы легко
определить, что предполагаемая цель вызова не удалась, поскольку свойство SUCCESS было установлено на «сбой».
Получите все соответствующие строки ошибок.
Вы можете легко сделать это с помощью такого шаблона в своих методах действий:
try
{
instance.Validate();
return Json(new AjaxResponse(myHtmlData));
}
catch(Exception ex)
{
var response = new AjaxResponse(ex);
// Get your validation errors here, put them into
// your ajax response's Errors property.
return Json(response);
}
person
womp
schedule
12.08.2009