2013-09-26 90 views
3

我正在使用下面的jquery調用GetFile方法。 我想基於某些條件生成文本文件。這總不會總是在 生成一個文本文件。返回文件或視圖的方法

如果條件=真生成文件

如果條件=假返回到主界面

現在如果我回來,我只是得到一個空白頁。

我該怎麼寫這個以至於我的兩個條件都被考慮了?

<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(); 
} 
+0

GetFile是一個控制器動作嗎?我不會猜測,因爲它正在返回'void'。 –

+0

GetFile駐留在控制器中,但不是ActionResult – user2320476

+1

它需要是一個Action才能被訪問。 –

回答

3

恕我直言:

  1. 更改GetFile是一個ActionResult
  2. 如果該文件可以寫入
    a。寫入內存流(而不是響應)
    b。 return File(memoryStream, "text/plain");
  3. 如果它不能寫入
    一個。 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() response methods

FWIW:您可以繼續使用StringBuilder並傳遞到File()重載之一,我想我只是更喜歡流。 :聳聳肩: