Я искал много часов в stackoverflow, но все ответы устарели или не работают. Я использую mvc5, и я использовал jquery .validate для проверки клиентской стороны для переменных для ajax post.
Я хотел бы знать, что если клиентская сторона работает не , и метод поста контроллера возвращает ошибку, тогда должно появиться сообщение об ошибке аннотации данных. Я видел много ответов для пользовательской проверки, однако я не хочу выполнить пользовательскую проверку, я хотел бы использовать аннотации данных из файла метаданных.
Кроме того, я не отправляю обратно всю информацию модель для контроллера, поэтому я не могу использовать функцию Model.ISValid.
Это мои метаданные:
[MetadataTypeAttribute(typeof(ApartmentBlock.ApartmentBlockMetaData))]
public partial class ApartmentBlock
{
internal sealed class ApartmentBlockMetaData
{
[Required]
[DisplayName("Adresse")]
public string Address { get; set; }
[Required]
public int District { get; set; }
[Required]
public string BuildingID { get; set; }
}
}
Это мой взгляд
@Html.EditorFor(model => model.ApartmentBlock.BuildingID, new { htmlAttributes = new { @class = "form-control", id = "editedBuildingID" } })
@Html.ValidationMessageFor(model => model.ApartmentBlock.BuildingID, "", new { @class = "text-danger" })
@Html.EditorFor(model => model.ApartmentBlock.Address, new { htmlAttributes = new { @class = "form-control", id = "editedAddress" } })
@Html.ValidationMessageFor(model => model.ApartmentBlock.Address, "", new { @class = "text-danger" })
@Html.EditorFor(model => model.ApartmentBlock.District, new { htmlAttributes = new { @class = "form-control", id = "editedDistrict" } })
@Html.ValidationMessageFor(model => model.ApartmentBlock.District, "", new { @class = "text-danger" })
Это мой ajax метод записи:
$ (документ) .on ('click', '.btn.btn - primary.saveEditBuilding', function (e) {
$("#buildingForm").validate();
if ($("#buildingForm").valid()) {
var editedAdddress = $('#editedAddress').val();
var editedBuildingID = $('#editedBuildingID').val();
var editedDistrict = $('#editedDistrict').val();
$.post("/Buildings/DetailsForEdit",
AddAntiForgeryToken({
address: editedAdddress,
buildingID: editedBuildingID,
district: editedDistrict,
id: '@Model.ApartmentBlock.ApartmentBlockID'
})).done
(
function (data, status) {
if (data.success == true) {
$('#subtitleBuildingHeader').html(data.header);
$('#addressuild').html(data.buidlingdeta);
$('#myModal').modal('hide');
}
else {
//show jquery validation messages
}
}).fail(function () {
//show jquery validation message
});
}
return false;
});
Это мой метод контроллера:
[HttpPost] [ValidateAntiForgeryToken ()]
public ActionResult DetailsForEdit(string address, string buildingID, string district, string id)
{
//int apartBlockID = Convert.ToInt32(id);
var modelView= buildRepo.EditApart(address, buildingID, district, id);
//checking if model is valid or is there better way?
if (modelView.ApartmentBlock.District.HasValue )
{
//if model valid then update view
//(code removed....)
return Json(new { header, buidlingdeta, success=true });
}
else
{
//return jquery validation messages from data annotations?
}
}