我有一个包含图表和表格数据的mvc Web应用程序。
情境:
我在Index方法中填充数据并返回模型以查看绑定。在视图中,表绑定数据。我还想用相同的数据绑定图表。图表绑定与子操作。我在Index方法中设置了TempData []对象,并在Chart动作中检索它。
代码:
控制器的
public ActionResult Index()
{
var data = new List<MyModel>()
{
new MyModel { Text = "Name1", Value = 123 },
new MyModel { Text = "Name2", Value = 24 },
};
TempData["data"] = data;
return View(data);
}
public FileContentResult Chart()
{
List<MyModel> data = TempData["data"] as List<MyModel>;
var chart = new Chart
{
Width = 300,
Height = 450,
};
if (data != null)
{
chart.ChartAreas.Add("");
chart.Series.Add("");
chart.Series[0].ChartType = SeriesChartType.Column;
foreach (var q in data)
{
chart.Series[0].Points.AddXY(q.Text, Convert.ToDouble(q.Value));
}
}
using (var chartimage = new MemoryStream())
{
chart.SaveImage(chartimage, ChartImageFormat.Png);
return File(chartimage.GetBuffer(), @"image/png");
}
}
public async Task<ActionResult> Export()
{
var converter = new HtmlToPdf();
var baseAddress = new Uri("http://localhost:4545/");
var cookieContainer = new System.Net.CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (HttpClient client = new HttpClient(handler) { BaseAddress = baseAddress })
{
var result = await client.GetAsync("/Home/Index");
var htmlString = await result.Content.ReadAsStringAsync();
var doc = converter.ConvertHtmlString(htmlString, baseAddress.ToString());
doc.Save(System.Web.HttpContext.Current.Response, true, "test.pdf");
doc.Close();
}
return null;
}
查看:
<div class="row">
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
<div class="col-md-12">
<table>
@{
foreach (var item in Model)
{
<tr>
<td>
@item.Text
</td>
<td>
@item.Value
</td>
</tr>
}
}
</table>
</div>
<div class="col-md-12">
<img src="@Url.Action("Chart")" />
<input type="submit" value="Filter" />
</div>
}
<div class="col-md-12">
@using (Html.BeginForm("Export", "Home", FormMethod.Post))
{
<input type="submit" value="Export" />
}
</div>
问题:
这里我使用SelectPdf将网页导出为pdf。当我单击“导出”按钮时,它会获取网页的内容,以便再次呈现索引和图表。但在这里我没有获得tempdata []值。它显示为null。所以图表数据没有得到pdf
请帮我解决这个问题
答案 0 :(得分:2)
请注意:
ASP.NET MVC中的TempData可用于存储可在后续请求中使用的临时数据。完成后续请求后,TempData将被清除。
因此,要在后续请求中保留TempData的值,您需要调用TempData.Keep()或Peek(&#34; tempdata name&#34;)。
保留语法:
String data = TempData["myData"] as string;
TempData.Keep();
Peek语法:
String data = TempData.Peek("myData");
答案 1 :(得分:0)
试试这个
/spaceships/$spaceship_id