gpt4 book ai didi

c# - 根据 Controller 中的 bool 值使 Ajax.BeginForm 的 OnSuccess 或 OnFailure 方法在 View 中生效?

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:54 24 4
gpt4 key购买 nike

我不知道 AjaxForm 如何知道何时触发 OnSuccessOnError 方法。但是,是否可以根据 Boolean 值让它们触发 OnSuccess 或 OnError 方法?

@using(Ajax.BeginForm("AddAttendeeManual", "Attendee", new AjaxOptions { HttpMethod = "POST", OnSuccess = "doneManualEmail" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
@Html.HiddenFor(m=>m.SelectedManualEmail.AppointmentId)


<div class="form-group">
@Html.LabelFor(m => m.SelectedManualEmail.Email, new { @class = "col-md-2 control-label" })
<div class="col-md-8 input-group">
@Html.TextBoxFor(m => m.SelectedManualEmail.Email, new {@class = "form-control",PlaceHolder="Email"})
<input type="submit" id="btnManual"class="btn btn-default" value="Add>>" />
</div>
</div>
}

这是 OnSucess 方法(在同一个 View 上)

   function doneManualEmail() {
alert("Success");
$(@Html.IdFor(m=>m.SelectedManualEmail.Email)).val('');
var url = $("#invitedPeoples").data('url');
$.get(url, function (data) {
$('#invitedPeoples').html(data);
});
};

这是 Controller 方法

[HttpPost]
[ValidateAntiForgeryToken]
public void AddAttendeeManual(CreateAppointmentSelectPersons manualEmail)
{
_attendeeRepository.AddManualAttendee(manualEmail.SelectedManualEmail.AppointmentId,
manualEmail.SelectedManualEmail.Email);
}

目前,当提交表单时,它会调用 Controller 的方法(将人员添加到数据库的地方),然后调用上面提到的 OnSuccess 方法。到现在没问题。

但是现在,我想在 Controller 中检查一些东西(如果 person 存在的话),这是我现在 Controller 的方法

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddAttendeeManual(CreateAppointmentSelectPersons manualEmail)
{
bool result = _attendeeRepository.CheckIfAttendeeExists(manualEmail.SelectedManualEmail.AppointmentId, manualEmail.SelectedManualEmail.Email);
if(!result)
{
_attendeeRepository.AddManualAttendee(manualEmail.SelectedManualEmail.AppointmentId,
manualEmail.SelectedManualEmail.Email);
//call OnSuccess method


}
else
{
//add ModelStateError on client side?? or make it fire OnError method?
}

}

PS:这个view没有get方法。基于 bool 值,我希望表单触发 OnSuccess 或 OnError 方法,如果它是 OnError,则在客户端添加错误(如模型状态)。

这可能吗?

最佳答案

Ajax.BeginForm OnError 方法基本上是 jQuery.ajax error 函数并在请求失败时被调用。因此,在您的情况下,除非您手动抛出异常,否则无法触发它。在我看来,这是一个解决方案,但不是一个好的解决方案。 CheckIfAttendeeExists 是正常的业务用例,应该由代码处理,而不是抛出异常。

相反,您可以返回一个 JSON,指示与会者是否存在:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddAttendeeManual(CreateAppointmentSelectPersons manualEmail)
{
bool result = _attendeeRepository.CheckIfAttendeeExists(manualEmail.SelectedManualEmail.AppointmentId, manualEmail.SelectedManualEmail.Email);
if(!result)
{
_attendeeRepository.AddManualAttendee(manualEmail.SelectedManualEmail.AppointmentId,
manualEmail.SelectedManualEmail.Email);
}
return Json(new { AttendeeExists = result, ErrorMessage = "Attendee already exists" });
}

在客户端检查属性:

function doneManualEmail(response) {
if(response.AttendeeExists) {
alert(response.ErrorMessage); // or something else
}
else {
alert("Success");
$(@Html.IdFor(m=>m.SelectedManualEmail.Email)).val('');
var url = $("#invitedPeoples").data('url');
$.get(url, function (data) {
$('#invitedPeoples').html(data);
});
}
};

ModelState 不会在这里帮助您,因为您的模型是有效的。您可以使用 JSON 返回错误消息。查看编辑后的代码。

关于c# - 根据 Controller 中的 bool 值使 Ajax.BeginForm 的 OnSuccess 或 OnFailure 方法在 View 中生效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21902242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com