Asp.net mvc 返回csv文件并重定向到同一页面MVC4
我有一个页面,有两个“开始日期”和“结束日期”文本框,还有一个“生成csv文件”按钮 所以,用户输入起始日期和截止日期,然后单击genearte按钮,csv文件就会下载到浏览器中 现在的问题是,如果页面上有任何验证,比如date无效,那么请添加验证摘要,并正确显示。因此,如果显示验证消息,然后我更正日期并单击生成,那么它将直接返回文件,验证消息仍然显示在页面上 csv文件返回后刷新页面的任何方法或解决上述问题的任何其他方法 代码如下:Asp.net mvc 返回csv文件并重定向到同一页面MVC4,asp.net-mvc,validation,csv,Asp.net Mvc,Validation,Csv,我有一个页面,有两个“开始日期”和“结束日期”文本框,还有一个“生成csv文件”按钮 所以,用户输入起始日期和截止日期,然后单击genearte按钮,csv文件就会下载到浏览器中 现在的问题是,如果页面上有任何验证,比如date无效,那么请添加验证摘要,并正确显示。因此,如果显示验证消息,然后我更正日期并单击生成,那么它将直接返回文件,验证消息仍然显示在页面上 csv文件返回后刷新页面的任何方法或解决上述问题的任何其他方法 代码如下: @using (Html.BeginForm("Index
@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>
}
无法使用文件输出刷新验证状态,因此您需要执行两次post 答:最快的方法是添加一个下载按钮,使其在所有字段验证后显示。
B.另一种方法是在验证所有字段后使用java脚本重新发布。您可以使用一些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>
函数ClearErrorMessages(){
var elements=document.getElementsByClassName(“验证摘要错误”);
对于(var i=0;i
然后向按钮添加onclick属性
<input type="submit" onclick="ClearErrorMessages(); return true;" value="Generate CSV File" />
尝试搜索;你不能。HTTP响应传递网页或文件。通过JavaScript下载文件并刷新页面。如果你能为A.1的选项A和B发布一些代码,这将非常有用。在MyModel 2中添加int-IsValid.Add-in-chtml@if(model.IsValid==1){}在HttpPost-Add-after-if(ModelState.IsValid):if(ModelState.IsValid){model.IsValid=1 if(Request.Form[“Action”]=“Download”){var-response=this.GetCsv(model.FromDate,model.ToDate)返回文件(新的UTF8Encoding().GetBytes(响应),“text/csv”,“Report.csv”);}
<input type="submit" onclick="ClearErrorMessages(); return true;" value="Generate CSV File" />