![](/img/trans.png)
[英]C# ActionLink MVC4 - Pass multiple parameters to ActionResult
[英]How to pass and read a bitearray from ActionResult to Another using MVC4 C#
我被要求從一個ActionResult傳遞MemoryStream到另一個ActionResult。 為了做到這一點,我試圖將一個動作結果的字節數組傳遞給另一個動作結果,這是我的代碼。
private MemoryStream GetSamplePdf(string name)
{
var ms = new MemoryStream();
using (var doc = new Document(PageSize.A4))
{
using (var writer = PdfWriter.GetInstance(doc, ms))
{
writer.CloseStream = false;
doc.Open();
doc.Add(new Paragraph(name));
doc.Close();
}
}
return ms;
}
public ActionResult PdfSpider()
{
var elem1 = PdfA();
var elem2 = PdfB();
return new EmptyResult();
}
public ActionResult PdfA()
{
var Pdfa = GetSamplePdf("A");
return Json(Pdfa.GetBuffer(), JsonRequestBehavior.AllowGet);
}
public ActionResult PdfB()
{
var Pdfb = GetSamplePdf("B");
return Json(Pdfb.GetBuffer(), JsonRequestBehavior.AllowGet);
}
如何讀取從Pdfa和Pdfb返回的值,並在Spider動作結果內部構造各個內存流?
Json
方法返回一個JsonResult
,而JsonResult
具有一個包含字節緩沖區的Data
屬性。
因此,在PdfSpider
內部,您可以將ActionResult
退回給JsonResult
,從Data
獲取Byte緩沖區並重建MemoryStream
:
var bytebufferA = (byte[])((JsonResult)PdfA()).Data;
var bytebufferB = (byte[])((JsonResult)PdfB()).Data;
var streamA = new MemoryStream(bytebufferA);
var streamB = new MemoryStream(bytebufferB);
更好的解決方案是(imo)編寫內部函數GetStreamA()
和GetStreamB()
,並像PdfA()
/ PdfB()
和PdfSpider
一樣使用它們
private MemoryStream GetStreamA() {
return GetSamplePdf("A");
}
public ActionResult PdfA() {
return Json(GetStreamA().GetBuffer(), JsonRequestBehavior.AllowGet);
}
// ...
// Same for PdfB()/GetStreamB()
// ...
public ActionResult PdfSpider() {
var streamA = GetStreamA();
var streamB = GetStreamB();
// ...
}
(我想這就是@ bgs264在他的評論中的意思……)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.