返回csv文件并重定向到同一页面MVC 4

时间:2015-07-20 14:58:13

标签: asp.net-mvc validation csv

我有一个包含两个文本框的页面,用于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);
    }        

2 个答案:

答案 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脚本重新发布。