Eu tenho uma ação simples do ASP.NET MVC como esta:
public ActionResult Edit(EditPostViewModel data)
{
}
Eles EditPostViewModel
têm atributos de validação como este:
[Display(Name = "...", Description = "...")]
[StringLength(100, MinimumLength = 3, ErrorMessage = "...")]
[Required()]
public string Title { get; set; }
Na visão, estou usando os seguintes ajudantes:
@Html.LabelFor(Model => Model.EditPostViewModel.Title, true)
@Html.TextBoxFor(Model => Model.EditPostViewModel.Title,
new { @class = "tb1", @Style = "width:400px;" })
Se eu fizer um envio em um formulário que esta caixa de texto seja colocada em uma validação será feita primeiro no cliente e depois no serviço ( ModelState.IsValid
).
Agora tenho algumas perguntas:
Isso pode ser usado com jQuery ajax submit em vez disso? O que estou fazendo é simplesmente remover o formulário e ao clicar no botão enviar um javascript irá coletar os dados e executar o
$.ajax
.O lado do servidor
ModelState.IsValid
funcionará?Como posso encaminhar o problema de validação de volta para o cliente e apresentá-lo como se eu estivesse usando o build int validation (
@Html.ValidationSummary(true)
)?
Exemplo de chamada Ajax:
function SendPost(actionPath) {
$.ajax({
url: actionPath,
type: 'POST',
dataType: 'json',
data:
{
Text: $('#EditPostViewModel_Text').val(),
Title: $('#EditPostViewModel_Title').val()
},
success: function (data) {
alert('success');
},
error: function () {
alert('error');
}
});
}
Editar 1:
Incluído na página:
<script src="/Scripts/jquery-1.7.1.min.js"></script>
<script src="/Scripts/jquery.validate.min.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js"></script>