3

我正在使用下面的 jquery 来调用GetFile方法。我想根据某些条件生成一个文本文件。这不会总是生成一个文本文件。

如果条件 = True 生成文件

如果条件 = False 返回主页面

现在,如果我确实返回,我只会得到一个空白页。

我怎样才能这样写才能考虑到我的两个条件?

<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        $("#Button1").click(function () {
            var SelCat = $("#mylist").val();              
            if (SelCat != 0) {
                var data = {
                    categoryId: SelCat   
                }
                var url = '@Url.Action("GetFile", "Home")' + '?' + $.param(data);
                window.location.assign(url);
            } else {
                alert("You need to select an city");
            }
        });
    });   
</script>
public void GetFile(int categoryId)
{
    var fileName = "ErrorMessages.txt";
    StringBuilder strObj = new StringBuilder();

    for (int i = 0; i <= 20000; i++)
    {
        strObj.Append("Number:" + i + " " + "Here is the first line" );
        strObj.Append(Environment.NewLine);
    }

    strObj.ToString();

    // ...
    // Based on some conditions determine whether to return a file or not
    // return;

    Response.Clear();
    Response.ContentType = "text/plain";
    Response.AddHeader("content-disposition", "attachment;  filename=" + fileName );
    Response.Write(strObj);
    //Response.BinaryWrite(strObj);

    Response.End();
}
4

1 回答 1

3

恕我直言:

  1. 将您更改GetFileActionResult.
  2. 如果文件可以写
    一个。写入内存流(而不是响应)
    b.return File(memoryStream, "text/plain");
  3. 如果不能写
    a。return Redirect("~/Main/Page");

伪代码:

public ActionResult GetFile(Int32 CategoryId)
{
  if (/*can be written*/)
  {
    using (MemoryStream stream = new MemoryStream())
    {
      using (StreamWriter writer new StreamWriter(stream))
      {
        /* writer.Write(...); */
      }
      return File(stream, "text/plain");
    }
  }
  return Redirect("~/main/Page"); // or redirectToRoute/RedirectToAction
}

并供参考:File()响应方法

FWIW:您可以继续使用StringBuilder并将其传递给其中一个File()重载,我想我只是更喜欢流。:耸肩:

于 2013-09-26T17:27:26.360 回答