0

ビューでチャートを作成しようとしています。コンテンツ(名前/シリーズ/タイプなど)はすべて、ユーザーがビューで選択したコントロールによって決定されます。

すでに作成されたチャートをロードする限り、たとえば次のようにすべて問題ありません。

私の見解の中:

     <controls above my graph>

  <img src="@Url.Action("StatusGraph")"/>

     <controls below my graph>

コントローラの内部

    //Creates status graph as specified by the controls in parent partial view or using          defaults
     public ActionResult StatusGraph(){
         return View();
     }

そして最後にStatusGraphビュー:(このMicrosoftチュートリアル が例として使用する一般的なチャート)

@{
// TODO: use the data from the model to draw a chart

var myChart = new Chart(width: 600, height: 400)
    .AddTitle("Chart title")
    .AddSeries(
        name: "Employee",
        xValue: new[] {  "Peter", "Andrew", "Julie", "Mary", "Dave" },
        yValues: new[] { "2", "6", "4", "5", "3" })
    .Write();
  }

私が言ったように、これは完全に機能し、実際には独自の別のウィンドウではなく親ビュー内にグラフをレンダリングします(本当にマイクロソフト、なぜですか?)しかし、StatusGraphメソッドを拡張してパラメーターを受け入れるとすぐに(単にグラフのタイトルをで始まり、それをStatusGraphに渡します。ブラウザが画像を読み込もうとすると、404エラーが発生します。

タイトルをビューに渡そうとする拡張StatusGraphメソッドにブレークポイントを設定すると、コードが呼び出されないかのように、コードが停止することはありません。

私の質問は、どうすればこれを機能させることができるかということです。ビューからアクション、別のビューにデータを渡すにはどうすればよいですか。

ありがとうございました!

4

1 に答える 1

1

ビューモデルを使用できます/使用する必要があります:

public class MyViewModel
{
    public string Title { get; set; }
}

その後:

public ActionResult StatusGraph(MyViewModel model)
{
    return View(model);
}

そして最後に:

@model MyViewModel
@{
    var myChart = new Chart(width: 600, height: 400)
        .AddTitle(Model.Title)
        .AddSeries(
            name: "Employee",
            xValue: new[] {  "Peter", "Andrew", "Julie", "Mary", "Dave" },
            yValues: new[] { "2", "6", "4", "5", "3" })
        .Write();
}

チャートをレンダリングするときに値を渡します。

<img src="@Url.Action("StatusGraph", new { title = "Chart title" })"/>

もちろん、値をパラメーターとしてimgソースに渡す代わりに、コントローラーアクションで値を定義することもできます。

public ActionResult StatusGraph()
{
    var model = new MyViewModel
    {
        // TODO: could come from a database or something
        Title = "Chart title"
    };
    return View(model);
}
于 2012-08-15T08:37:06.650 に答える