【问题标题】:Download text file via ASP.NET MVC dynamically changed通过动态更改的 ASP.NET MVC 下载文本文件
【发布时间】:2018-11-26 16:40:55
【问题描述】:

我必须根据输入(复选框)生成文件并下载它:

[HttpGet]
    public FileResult GenerateFormatSettingsFile(IEnumerable<string> values)
    {
        var content = FileSettingsGenerator.Generate(values);
        MemoryStream memoryStream = new MemoryStream();
        TextWriter tw = new StreamWriter(memoryStream);

        tw.WriteLine(content);
        tw.Flush();
        tw.Close();

        return File(memoryStream.GetBuffer(), "text/plain", "file.txt");
    }

在我看来:

<button id="GenetateFormatSettingsFile" class="btn btn-primary"  data-dismiss="modal"  style="margin-right: 1500px">Generate</button>

$(document).ready(function() {
        $("#GenetateFormatSettingsFile").click(function() {
            var f = {};
            var checkboxes = [];
            $('input:checked').each(function() {
                checkboxes.push($(this).attr("value"));
            });
            f.url = '@Url.Action("GenerateFormatSettingsFile", "Home")';
            f.type = "GET";
            f.dataType = "text";
            f.data = { values: checkboxes},
                f.traditional = true;

            f.success = function(response) {

            };
            f.error = function(jqxhr, status, exception) {
                alert(exception);
            };
            $.ajax(f);
        });
    });
</script>

问题是下载没有开始。我该如何解决?

如果我使用 Html.ActionLink 执行此操作,下载会开始,但我无法传递由上面的 ajax 函数完成的复选框的值

谢谢!

编辑 - 这就是我的复选框的样子:

<div class="container">
<div class="row">
    <div class="col-xs-12">
        <div class="modal" id="formatterSettings" tabindex="-1">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <button class="close" data-dismiss="modal">&times;</button>
                        <h4 class="modal-title">Settings</h4>
                    </div>
                    <div class="modal-body">
                        <form>
                            <div class="form-group">
                                <label for="defaultG">To default view</label>
                                <input class="form-control" type="checkbox" value="Default" id="defaultG">
                            </div>
                            <div class="form-group">
                                <label for="extendedG">To extended view</label>
                                <input class="form-control" type="checkbox" value="Extended" id="extendedG">
                            </div>
                            /div>
                        </form>
                    </div>
                    <div class="modal-footer">
                        <div class="col-md-6">
                            <button id="GenetateFormatSettingsFile" class="btn btn-primary"  data-dismiss="modal"  style="margin-right: 1500px">Generate</button>
                            @Html.ActionLink("Generate!", "GenerateFormatSettingsFile")
                        </div>
                        <div class="col-md-6">
                            <a  class="btn btn-primary" data-dismiss="modal" >Generate From Code</a>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

【问题讨论】:

  • Ajax 不是文件下载的最佳解决方案!做一个正常的请求
  • @Shyju 那么我无法收集复选框信息
  • 你可以。你是如何渲染复选框的?
  • @Shyju 添加在上面
  • 如果是正常发帖,你需要给每个复选框一个name="values" 属性。另请参阅Download Excel file via AJAX MVC

标签: asp.net ajax asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

在您的表单中放置一个提交按钮并同步POST您的表单(不使用 ajax)。 发布表单时,所有输入元素(TextBoxes、CheckBoxes、...)的值都会发送到服务器(与请求一起),您无需执行任何操作。

【讨论】:

  • 这种方法的唯一问题是页面重新加载。当您只使用 Ajax 调用时,用户的眼睛会更悦目。
  • @IyaTaisho,您无法使用 ajax 下载文件!
  • 我说的不是下载文件。提供的评论是关于从页面中提取数据(文本框、复选框等)。您不必使用表格来提取我所说的数据,而不是文件下载部分。下载部分,是的,你不能使用 Ajax 拉取。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
相关资源
最近更新 更多