要求:我有一个推荐形式,即用户可在填写详细信息来申请工作。 现在,按我的要求,如果用户想重新申请同样的工作,他可以这样做,次数多号(幽默我在此)。 所以,如果我检测到用户在此之前已经申请了这份工作,我需要更新旧的转诊要求,如果没有则创建一个新的请求。
当前的行为:我已经成功地写入覆盖现有的值(如果用户已经申请之前)的逻辑。 但我想说明一个弹出或部分确认,如果我检测到用户已经申请到这份工作,更新简历和日期等领域之前。 而一旦用户说是的,然后我只希望覆盖的值 。
问题:我不知道如何实现以上。 因为一旦请求转到后端控制器行动,那么只有我能察觉,这是新的东西或者这是一个已经存在并且需要被覆盖的东西,弹出需要显示。
视图:
@model Bridge.ViewModels.ReferralViewModel
@using (Html.BeginForm())
{
<div class="form-horizontal">
<h4>Job Request</h4>
<div class="form-group">
@Html.LabelFor(model => model.CompanyId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.CompanyId, Model.Companies, "Please Select", new { @class = "form-control", data_url = Url.Action("ListOfCoverLetterByCompanyId", "Referral") })
</div>
</div>
@* SOME FIELDS REMOVED FOR BREVITY*@
<div class="form-group">
@Html.LabelFor(model => model.ResumeId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.ResumeId, Model.Resumes, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CoverLetterId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.CoverLetterId, Model.CoverLetters, "Please select", new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
控制器动作
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ReferralViewModel viewModel)
{
var candidateId = User.Identity.GetUserId();
var referral = _context.Referrals.Where(r => (r.CandidateId == candidateId) && (r.CompanyId == viewModel.CompanyId)).SingleOrDefault();
if (referral != null)
{
// if already existing then show a confirmation/warning before updating
referral.ResumeId = viewModel.ResumeId;
referral.CoverLetterId = viewModel.CoverLetterId;
referral.dateTime = DateTime.Now;
}
else
{
// If new then add the entry
}
_context.SaveChanges();
return RedirectToAction("ReferralCenter");
}
编辑
尝试1:
视图:
@section scripts {
<script>
$('form').submit(function () {
var data = $('form').serialize();
var url = '@Url.Action("CheckForExistingReferral")';
$.ajax({
url: url,
type: 'POST',
data: data,
success(data)
{
debugger;
alert("hello");
// some logic
},
error()
{
debugger;
alert("error");
//some logic
}
});
});
</script>
}
AJAX操作:
[HttpPost]
public JsonResult CheckForExistingReferral(ReferralViewModel viewModel)
{
bool hasPreviousRequest = false;
var candidateId = User.Identity.GetUserId();
var referral = _context.Referrals.Where(r => (r.CandidateId == candidateId) && (r.CompanyId == viewModel.CompanyId) && (r.SkillId == viewModel.SkillId) && (string.IsNullOrEmpty(r.ReferrerId))).SingleOrDefault();
hasPreviousRequest = referral != null;
return Json(new { hasPreviousRequest = hasPreviousRequest });
}
问题:
断点JSON功能被击中,但在此之前它可以返回的结果,我的实际表单POST方法断点被击中。 我想在表单POST控制器动作等待AJAX调用返回。
尝试2
视图
@section scripts {
<script>
var canSubmit = false;
debugger;
$('form').submit(function (e) {
if (!canSubmit)
e.preventDefault();
var data = $('form').serialize();
var url = '@Url.Action("CheckForExistingReferral")';
$.ajax({
url: url,
type: 'POST',
data: data,
success(response){
if (response.hasPreviousRequest)
{
if (confirm("You've already applied for this job. Apply again?")) {
canSubmit = true;
$('form').submit();
}
}
else {
canSubmit = true;
$('form').submit();
}
},
error(){
alert("error");
}
});
});
</script>
}
问题:对于单一的点击,我的Json行动被击中ATLEAST 3倍。 应该只有一次命中。
尝试3
给一个ID的形式:
@using (Html.BeginForm("Create", "Referral", FormMethod.Post, new { id = "job-form" }))
{}
脚本:
@section scripts {
<script>
var canSubmit = false;
debugger;
$('#job-form').submit(function (e) {
if (!canSubmit)
e.preventDefault();
var data = $('#job-form').serialize();
var url = '@Url.Action("CheckForExistingReferral")';
$.ajax({
url: url,
type: 'POST',
data: data,
success: function (response) {
if (response.hasPreviousRequest)
{
if (confirm("You've already applied for this job. Apply again?")) {
canSubmit = true;
$('#job-form').submit();
}
}
else {
canSubmit = true;
$('#job-form').submit();
}
},
error: function (){
alert("error");
}
});
});
</script>
}
问题:我一直看到JS在一个循环中弹出。