MVC имеет разметку RemoteValidator, в которую можно добавить дополнительные свойства для отправки на сервер для проверки, но при этом создается только одно сообщение проверки.
В какой-то момент я пытался сделать то, что выпредполагают, что при отправке данных на сервер через AJAX, некоторой проверке, возвращении списка ошибок, отображении некоторых сообщений об ошибках.Я сделал это, чтобы создать собственный объект, который я использовал бы для всех моих ответов JSON.Вы можете расширить объект, включив в него массив или список пар имя / значение, которые позволят вам определить, в каких полях есть ошибки.
public class JSONResponseObject
{
private bool m_Success;
private string m_Redirect;
private string m_Message;
private object m_Data;
public bool Success
{
get { return m_Success; }
set { m_Success = value; }
}
public string Redirect
{
get { return m_Redirect; }
set { m_Redirect = value; }
}
public string Message
{
get { return m_Message; }
set { m_Message = value; }
}
public object Data
{
get { return m_Data; }
set { m_Data = value; }
}
public JSONResponseObject(bool Success)
{
m_Success = Success;
m_Redirect = null;
m_Message = null;
m_Data = null;
}
public JSONResponseObject(bool Success, object Data)
{
m_Success = Success;
m_Data = Data;
m_Redirect = null;
m_Message = null;
}
public JSONResponseObject(string Redirect)
{
m_Success = true;
m_Redirect = Redirect;
m_Message = null;
m_Data = null;
}
public JSONResponseObject(bool Success, string Message)
{
m_Success = Success;
m_Message = Message;
m_Redirect = null;
m_Data = null;
}
public JSONResponseObject(bool Success, string Message, object Data)
{
m_Success = Success;
m_Message = Message;
m_Data = Data;
m_Redirect = null;
}
}
Это позволяет вам возвращать ответ клиенту и проверять свойства:
$.ajax({
type: "POST",
dataType: 'json',
url: "/woconnect/searchclients",
data: "q=" + escape($('#searchTerm').val()) + "&clienttypeid=" + escape($('input[name="clienttypeid"]:checked').val()),
success: function(response) {
if (response.Success) {
//do something with response.Data or response.Redirect
}
else
alert(response.Message);
$.unblockUI();
},
error: function() { $.unblockUI(); alert('An error occured and we were unable to load the clients'); }
});
Самая большая проблема заключается в том, что вам придется написать валидацию внутри контроллеров, создавая зависимость между контроллерами и представлениями.Мне это не понравилось.Мой следующий проект использовал встроенную клиентскую проверку для MVC, которая использовала jQuery.Validate, как предложил rauland.При правильной настройке вы можете использовать одно действие, чтобы вернуть полное или частичное представление или даже ответ JSON, проверив Request.IsAjaxRequest ().Предстоит проделать большую работу, и я обнаружил, что сборка в валидации была самой простой вещью.