gpt4 book ai didi

asp.net-mvc - Ajax.BeginForm和验证

转载 作者:行者123 更新时间:2023-12-03 18:01:09 27 4
gpt4 key购买 nike

客户端验证不适用于Ajax.BeginForm

这是我的代码:

<div id="report">
<div id="projectReport">
<div >
@{
Html.EnableClientValidation();
}

@using (Ajax.BeginForm("AnalyticsDates", new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "reportContent"
}))
{
@Html.LabelFor(m => m.StartDate)
@Html.TextBoxFor(m => m.StartDate, new { id = "start" })
@Html.ValidationMessageFor(model => model.StartDate)
@Html.LabelFor(m => m.EndDate)
@Html.TextBoxFor(m => m.EndDate, new { id = "end" })
@Html.ValidationMessageFor(model => model.EndDate)
<input id="btnsearch" type="submit" value=@Titles.Search class="iconHeader"/>
}
</div>
</div>
<div id="reportContent">
</div>
</div>

我在web.config页面中启用了验证:
<add key="ClientValidationEnabled" value="true" />   
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

并添加了js文件
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

与第一个有关的第二期,
我的行动是
[HttpPost]
[Authorize(Roles = "XXXReport")]
public async Task<ActionResult> AnalyticsDates(ReportRequestVM reportRequestVM)
{
if (!ModelState.IsValid)
{
return View("**MainReports**", reportRequestVM);
}

// fill reportRequestVM with data
return View("**PartialReport**", reportRequestVM);


}

如果模型有效,则返回部分 View ,页面看起来不错,否则,返回带有表单的主 View ,但在此页面中,它两次自我渲染。问题是,如果客户端验证失败,如何返回带有验证错误的主表单?

任何帮助,将不胜感激,
10x Rony

最佳答案

我想到了...
您应该对结果和查询有部分看法。

如果失败,则应返回“http错误请求”,并使用以下命令在搜索局部 View 上设置验证。

它应该是这样的:

        @using (Ajax.BeginForm("CloudAnalyticsDates", new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "reportContent",
OnFailure = "OnCloudAnalyticsFailure",
OnBegin = "ValidateForm",


}))
{
@Html.LabelFor(m => m.StartDate)
@Html.TextBoxFor(m => m.StartDate, new { id = "start" })
@Html.ValidationMessageFor(model => model.StartDate)
@Html.LabelFor(m => m.EndDate)
@Html.TextBoxFor(m => m.EndDate, new { id = "end" })
@Html.ValidationMessageFor(model => model.EndDate)
<input id="btnsearch" type="submit" value=@Titles.Search class="iconHeader"/>
}
</div>
</div>

<script type="text/javascript">
$(document).ready(function () {
$("#datePicker").kendoDatePicker();
$("#start").kendoDatePicker().data("kendoDatePicker");
$("#end").kendoDatePicker().data("kendoDatePicker");
});


function OnCloudAnalyticsFailure(parameters) {

$('#projectReport').html(parameters.responseText);
$('#reportContent').empty();
CleanValidationError('form');
}



</script>

在服务器上,它应该看起来像:
[HttpPost]

public async Task<ActionResult> CloudAnalyticsDates(ReportRequestVM reportRequestVM)
{
if (!ModelState.IsValid)
{
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return PartialView("_ReportQuery", reportRequestVM);
}


reportRequestVM.BomTotals = await CommonRequestsHelper.GetBomTotalAnalytics(bomTotalRequest);
return PartialView("_ProjectReport", reportRequestVM);
}

关于asp.net-mvc - Ajax.BeginForm和验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635460/

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