我有一个包含两个文本框的页面,用于From date和To date以及一个生成csv文件按钮。
所以用户同时输入和输入日期并单击genearte按钮并将csv文件下载到浏览器。
现在的问题是,如果页面上有任何验证,例如日期无效,那么为此添加了验证摘要并且它正确显示。因此,如果显示验证消息,然后我更正日期并单击生成,则它会直接返回文件,并且验证消息仍显示在页面上。
在csv文件返回后以任何方式刷新页面或以任何其他方式解决上述问题。
代码如下:
@using (Html.BeginForm("Index", "MyController", null, FormMethod.Post, new { novalidate = "novalidate" }))
{
@Html.ValidationSummary(true, "Error on page")
<div >
<div>
@Html.LabelFor(model => model.FromDate)
<div>
@Html.TextBoxFor(m => m.FromDate, "{0:MM/dd/yyyy}", new { @id="fromDate" })
@Html.ValidationMessageFor(x => x.FromDate)
</div>
</div>
<div>
@Html.LabelFor(model => model.ToDate)
<div>
@Html.TextBoxFor(m => m.ToDate, "{0:MM/dd/yyyy}", new {@id = "toDate"})
@Html.ValidationMessageFor(x => x.ToDate)
</div>
</div>
<div>
<input type="submit" value="Generate CSV File"/>
</div>
</div>
}
控制器:
[HttpPost]
public ActionResult Index(MyModel model)
{
if (ModelState.IsValid)
{
var response = this.GetCsv(model.FromDate, model.ToDate)
return File(new UTF8Encoding().GetBytes(response), "text/csv", "Report.csv");
}
return this.View(model);
}
答案 0 :(得分:2)
您可以使用一些javascript来执行此操作。
javascript
<script>
function ClearErrorMessages() {
var elements = document.getElementsByClassName("validation-summary-errors");
for (var i = 0; i < elements.length; i++) {
elements[i].innerHTML = "";
}
elements = document.getElementsByClassName("field-validation-error");
for (var i = 0; i < elements.length; i++) {
elements[i].innerHTML = "";
}
//Removes validation from input-fields
$('.input-validation-error').addClass('input-validation-valid');
$('.input-validation-error').removeClass('input-validation-error');
//Removes validation message after input-fields
$('.field-validation-error').addClass('field-validation-valid');
$('.field-validation-error').removeClass('field-validation-error');
//Removes validation summary
$('.validation-summary-errors').addClass('validation-summary-valid');
$('.validation-summary-errors').removeClass('validation-summary-errors');
}
</script>
然后在按钮上添加onclick属性
<input type="submit" onclick="ClearErrorMessages(); return true;" value="Generate CSV File" />
答案 1 :(得分:0)
无法刷新验证状态使用文件输出,所以你需要做两次post ...
一个。最快的方法是添加一个下载按钮,使其在所有字段都经过验证后显示。 B.另一种方法是在验证所有字段后使用java脚本重新发布。