返回文件或视图的方法

时间:2013-09-26 14:03:21

标签: c# javascript jquery asp.net-mvc

我使用下面的jquery来调用GetFile方法。 我想根据某些条件生成一个文本文件。这并不总是如此 始终生成文本文件。

如果condition = True,则生成文件

如果condition = 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();
}

1 个答案:

答案 0 :(得分:3)

IMHO:

  1. 将您的GetFile更改为ActionResult
  2. 如果文件可以写入 一个。写入内存流(而不是响应)
    return File(memoryStream, "text/plain");
  3. 如果不能写入 一个。 return Redirect("~/Main/Page");
  4. 伪代码:

    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() response methods

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