Строка ошибки «Ссылка на объект, не установленная на экземпляр объекта.» указывает, что вы не назначили экземпляр объекта объектной ссылке, и все же вы получаете доступ к свойствам / методам этого объекта.
например: скажем, у вас есть класс под названием myClass и он содержит одно свойство prop1.
public Class myClass
{
public int prop1 {get;set;}
}
Теперь вы получаете доступ к этому prop1 в каком-то другом классе, как показано ниже:
public class Demo
{
public void testMethod()
{
myClass ref = null;
ref.prop1 = 1; //This line throws error
}
}
выше строки выдает ошибку, потому что ссылка класса myClass объявлена, но не создана, или экземпляр объекта не назначается referecne этого класса.
Чтобы исправить это, вам нужно создать экземпляр (присвоить объект ссылке на этот класс).
public class Demo
{
public void testMethod()
{
myClass ref = null;
ref = new myClass();
ref.prop1 = 1;
}
}
вы можете вернуть FileResult из своего действия MVC.
********************* Действие MVC ************
public FileResult OpenPDF(parameters)
{
//code to fetch your pdf byte array
return File(pdfBytes, "application/pdf");
}
************** js **************
Используйте formpost для отправки ваших данных в действие
var inputTag = '<input name="paramName" type="text" value="' + payloadString + '">';
var form = document.createElement("form");
jQuery(form).attr("id", "pdf-form").attr("name", "pdf-form").attr("class", "pdf-form").attr("target", "_blank");
jQuery(form).attr("action", "/Controller/OpenPDF").attr("method", "post").attr("enctype", "multipart/form-data");
jQuery(form).append(inputTag);
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
return false;
Вам нужно создать форму для публикации ваших данных, добавить ее в свой дом, опубликовать свои данные и удалить форму вашего тела документа.
Однако сообщение формы не будет отправлять данные в новую вкладку только в браузере EDGE. Но запрос получения работает, поскольку он просто открывает новую вкладку с URL-адресом, содержащим строку запроса для ваших параметров действия.
Вместо того, чтобы загружать поток в массив байтов и записывать его в поток ответов, вы должны посмотреть на HttpResponse.TransmitFile
Response.ContentType = "Application/pdf";
Response.TransmitFile(pathtofile);
. Если вы хотите, чтобы PDF для открытия в новом окне вам нужно будет открыть страницу загрузки в новом окне, например, например:
<a href="viewpdf.aspx" target="_blank">View PDF</a>
это может помочь
Response.Write("<script>");
Response.Write("window.open('../Inventory/pages/printableads.pdf', '_newtab');");
Response.Write("</script>");
Здесь я использую dll iTextSharp для создания файла PDF. Я хочу открыть файл PDF вместо его загрузки. Поэтому я использую код ниже, который отлично работает для меня. Теперь файл pdf открывается в браузере, теперь dowloading
Document pdfDoc = new Document(PageSize.A4, 25, 10, 25, 10);
PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
Paragraph Text = new Paragraph("Hi , This is Test Content");
pdfDoc.Add(Text);
pdfWriter.CloseStream = false;
pdfDoc.Close();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.End();
Если вы хотите загрузить файл, добавьте строку ниже, после этого Response.ContentType = "application / pdf";
Response.AddHeader("content-disposition", "attachment;filename=Example.pdf");
Response.ContentType = contentType;
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=" + fileName);
Response.BinaryWrite(fileContent);
И
<asp:LinkButton OnClientClick="openInNewTab();" OnClick="CodeBehindMethod".../>
В javaScript:
<script type="text/javascript">
function openInNewTab() {
window.document.forms[0].target = '_blank';
setTimeout(function () { window.document.forms[0].target = ''; }, 0);
}
</script>
Позаботьтесь о сбросе цели, в противном случае все остальные вызовы, такие как Response.Redirect
, откроются на новой вкладке , что может быть не то, что вы хотите.
Используйте этот код. Это работает как чемпион.
Process process = new Process();
process.StartInfo.UseShellExecute = true;
process.StartInfo.FileName = outputPdfFile;
process.Start();
Вы должны создать либо другую страницу, либо общий обработчик с кодом для создания вашего pdf. Затем это событие активируется, и человек перенаправляется на эту страницу.