C#とRazorでASP.NET MVC3アプリケーションを使用しています。
フィルター(年、月など)を使用してページを作成したいのですが、ユーザーがフィルターを選択して送信ボタンをクリックすると、グラフが表示されます。次のコードを使用します (機能しません): Stats.cshtml を表示します。
@{
ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
@{ Html.RenderPartial("StatsFilter", Model.FilterViewModel); }
<img src="@Url.Action("DrawChart")" alt="Drawing chart with HTML Helper" />
コントローラ
public class HomeController : Controller
{
public ActionResult Index()
{
return View("Stats", StatsViewModel);
}
[HttpPost]
public ActionResult Index(FiltersViewModel filters)
{
//Retrieve Data
return View("Stats", StatsViewModel);
}
public ActionResult DrawChart(GraphViewModel graph)
{
var chart = new Chart(width: 500, height: 600)
.AddTitle("Chart Title")
.AddSeries(
chartType: "Line",
name: "Stats",
xValue: chartData.XValues.Keys.ToList(),
yValues: chartData.XValues.Values.ToList())
.GetBytes("png");
return File(chart, "image/bytes");
}
}
ビューモデル
public class StatsViewModel
{
public FilterViewModel Filters { get; set; }
public GraphViewModel Graph { get; set; }
}
このような解決策では、ViewModel をグラフに渡す方法がわかりません。さらに、いくつかの小さな調整を行うと (アクション メソッドGraphViewModel
からも削除するなどDrawChart
)、グラフはデータがなくても表示されます。
ユーザーがフィルターを選択してグラフを表示できるようにしたいと思います。私が正しい道を進んでおり、私のコードが完全に破棄されないことを願っています。