我正在使用下面的 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();
}
IMHO:
- 改变你的
GetFile
成为一个ActionResult
.
- 如果文件可以写入
A。写入内存流(而不是响应)
b. return File(memoryStream, "text/plain");
- 如果写不出来
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()
重载,我想我只是更喜欢流。 :耸肩:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)