我有一个 C# 方法,如果你从另一个 C# 方法调用它,但不能从 javascript 调用它。如何通过我的 ajax 调用使其工作?
我需要根据传入的 ID 获取文件,所以我有一个带有 statusID 的 ajax 帖子。该 ID 在我的 C# 方法中提取了正确的文件,它只是没有给出文件保存对话框。
但是,如果我从我的 C# 页面加载方法中调用它并使用静态 statusID 进行测试,它就可以正常工作。
这是 C# 方法:
public void Get_Attachment_By_StatusID(int statusID)
{
SqlDataReader _reader = null;
string _connString = "Data Source=133.31.32.33;Initial Catalog=Reports;Integrated Security=True";
string sql = "SELECT a.StatusID ,a.DocumentName ,a.MIMETypeID ,a.Binary ,a.CreatedDate ,a.CreatedBy " +
",b.MIMEType FROM Attachments a Inner join MIME_Types b on a.MIMETypeID = b.ID " +
"WHERE [StatusID] = {0} ";
sql = string.Format(sql, statusID);
try
{
_connection = new SqlConnection(_connString);
_connection.Open();
using (SqlCommand cmd = new SqlCommand(sql, _connection))
{
cmd.CommandType = System.Data.CommandType.Text;
_reader = cmd.ExecuteReader();
if (_reader.HasRows)
{
while (_reader.Read())
{
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
System.Web.HttpContext.Current.Response.ContentType = _reader["MIMEType"].ToString();
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + _reader["DocumentName"].ToString() + ";");
byte[] b = (byte[])_reader["Binary"];
System.Web.HttpContext.Current.Response.BinaryWrite(b);
System.Web.HttpContext.Current.Response.Flush();
System.Web.HttpContext.Current.Response.Close();
}
}
_reader.Close();
_connection.Close();
}
}
catch (Exception ex)
{
//Log exception to error Logging app
string err = ex.ToString();
}
finally
{
if (_connection != null)
_connection.Close();
if (_reader != null)
_reader.Close();
}
}
这是我在 javascript 中从我的页面调用它的方式:
function GetFile(statusID) {
var url = '/Home/Get_Attachment_By_StatusID';
$.ajax({
url: url,
type: 'post',
cache: false,
data: JSON.stringify({ "statusID": statusID }),
contentType: 'application/json',
success: function (data) {
}
});
}
没发生什么事。在 Chrome 中,我在 javascript 控制台中看不到任何内容,在 IE 中,我的控制台吐出:“XML5619:文档语法不正确。”
同样,如果我进入控制器,并在我的页面加载方法中调用该方法,它会显示保存文件对话框并很好地保存文件。所以我的 javascript/jquery/ajax 一定做错了什么......
我是 MVC4 的新手,我知道我在这里遗漏了一些东西。我错过了什么?