Asp.net mvc 返回csv文件并重定向到同一页面MVC4

Asp.net mvc 返回csv文件并重定向到同一页面MVC4,asp.net-mvc,validation,csv,Asp.net Mvc,Validation,Csv,我有一个页面,有两个“开始日期”和“结束日期”文本框,还有一个“生成csv文件”按钮 所以,用户输入起始日期和截止日期,然后单击genearte按钮,csv文件就会下载到浏览器中 现在的问题是,如果页面上有任何验证,比如date无效,那么请添加验证摘要,并正确显示。因此,如果显示验证消息,然后我更正日期并单击生成,那么它将直接返回文件,验证消息仍然显示在页面上 csv文件返回后刷新页面的任何方法或解决上述问题的任何其他方法 代码如下: @using (Html.BeginForm("Index

我有一个页面,有两个“开始日期”和“结束日期”文本框,还有一个“生成csv文件”按钮

所以,用户输入起始日期和截止日期,然后单击genearte按钮,csv文件就会下载到浏览器中

现在的问题是,如果页面上有任何验证,比如date无效,那么请添加验证摘要,并正确显示。因此,如果显示验证消息,然后我更正日期并单击生成,那么它将直接返回文件,验证消息仍然显示在页面上

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>
}

无法使用文件输出刷新验证状态,因此您需要执行两次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" />