جهت تکمیل راهنمایی دوستون جناب تاجیک
فرض کنیم میخایم اطلاعات یک شخص رو ثبت کنیم
فرم مورد نظر مون بدین شکل طراحی میکنیم
<div class="panel-body">
@using (Html.BeginForm("CreatePersonnel","Person", FormMethod.Post,
new {@class = "form-horizontal", id = "personForm"}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(false, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(m => m.PersonnelViewModel.FirstName, new { @class = "control-label col-md-2 col-lg-2 ", @for = "FirstName" })
<div class="col-md-8 col-lg-8">
@Html.TextBoxFor(m => m.PersonnelViewModel.FirstName, new { @class = "form-control",id= "FirstName" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.PersonnelViewModel.LastName, new { @class = "control-label col-md-2 col-lg-2", @for = "LastName" })
<div class="col-md-8 col-lg-8">
@Html.TextBoxFor(m => m.PersonnelViewModel.LastName, new { @class = "form-control", id = "LastName" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.PersonnelViewModel.PersonnelCode, new { @class = "control-label col-md-2 col-lg-2", @for = "PersonnelCode" })
<div class="col-md-8 col-lg-8">
@Html.TextBoxFor(m => m.PersonnelViewModel.PersonnelCode, new { @class = "form-control",id= "PersonnelCode" })
</div>
</div>
<div class="form-group">
<button type="button" id="save" style="width: 30%" name="submit" class="btn btn-success col-md-offset-4">
<i class="fa fa-save"></i> ثبت در سیستم
</button>
</div>
}
</div>
برای ثبت اطلاعات فرم هم یک متد بنویسید بدینصورت
<script>
$(document).ready(function ()
{
$("#save").click(function (e) {
e.preventDefault();
var button = $("#save");
var $form = $("#personForm");
var validator = $form.data('validator');
validator.settings.ignore = ':hidden:not(".multiselect")';
validator.settings.ignore = ":hidden:not(select)";
var validateForm = function (form) {
//فعال سازي دستي اعتبار سنجي جيكوئري
var val = form.validate();
val.form();
return val.valid();
};
//اگر فرم اعتبار سنجي نشده، اطلاعات آن ارسال نشود
if (!validateForm($form)) return;
//برای چلوگیری از دوبار کلیک شدن دکمه ثبت
button.attr('disabled', 'disabled');
button.val("لطفا صبر کنید");
$.ajax({
url: '@Url.Action("CreatePersonnel", "Person")',
type: "POST",
data: $form.serialize(), //تمام فيلدهاي فرم منجمله آنتي فرجري توكن آنرا ارسال ميكند
cache: false,
complete: function (xhr, status) {
var data = xhr.responseText;
if (xhr.status == 403) {
window.location = options.loginUrl; //در حالت لاگين نبودن شخص اجرا ميشود
}
else if (status === 'error' || !data)
{
$.each(data, function (idx, errorMessage) {
alert(errorMessage);
});
}
else {
//دکمه ثبت به حالت اول خود بر میگردد و فعال میشود
button.removeAttr('disabled');
button.val("ثبت در سیستم");
//غیر فعال شدن ولیدیشن پس از ثبت
$('.validation-summary-errors').addClass('validation-summary-valid');
$('.validation-summary-errors').removeClass('validation-summary-errors');
}
},
success: function (data)
{
if (data.IsSuccess)
{
$('#personForm')[0].reset();
alert('ثبت اطلاعات با موفقیت انجام شد!');
}
else
{
if (data.errors != null)
{
// show model state error
$.each(data.errors, function (idx, errorMessage)
{
alert(errorMessage);
});
}
}
},
error: function (xhr, ajaxOptions, thrownError) {
alert(thrownError + " " + xhr.status);
}
});
});
});
</script>
این هم کدهای کنترلر برنامه
[HttpGet]
public virtual ActionResult CreatePersonnel()
{
var model = new AddPersonelViewModel () ;
return View(model);
}
[HttpPost]
[AjaxOnly] //فقط در حالت ايجكس قابل دسترسي باشد
[ValidateAntiForgeryToken]
public virtual async Task<ActionResult> CreatePersonnel(AddPersonelViewModel model)
{
if (!ModelState.IsValid)
{
return Content("خطاهای برنامه بررسی کنید");
}
var data = new Personnel
{
FirstName = model.PersonnelViewModel.FirstName,
LastName = model.PersonnelViewModel.LastName,
FullName=model.PersonnelViewModel.FirstName+" "+model.PersonnelViewModel.LastName,
.....
};
_accountService.Value.AddPersonnel(data);
await SaveAllChangesAsync();//ذخیره در دیتابیس
return new JsonResult
{
Data = new
{
IsSuccess=true;
errors = ModelState.Keys.SelectMany(k => ModelState[k].Errors).Select(x => x.ErrorMessage).ToArray(),
message="ثبت با موفقیت"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
};
}