1

MVC3 コントローラーに次の 3 つのアクション メソッドがあるとします。

public ActionResult ShowReport()
{
    return View("ShowReport");
}

[PageOptions(OutputFormat = OutputFormat.Web)]
public ActionResult ShowReportForWeb()
{
    return View("ShowReport");
}

[PageOptions(OutputFormat = OutputFormat.Pdf)]
public ActionResult ShowReportForPdf()
{
    return View("ShowReport");
}

私の Razor ビューでは、次のことを伝えたいと思います。

  1. 呼び出し元のアクション メソッドに PageOptions 属性が付加されているかどうか。
  2. そうであった場合、その OutputFormat プロパティの値は何ですか。

私がやろうとしていることを示す擬似コードを次に示します。

@if (pageOptions != null && pageOptions.OutputFormat == OutputFormat.Pdf)
{
@:This info should only appear in a PDF.
} 

これは可能ですか?

4

2 に答える 2

2

LeffeBrune は正しいです。その値を ViewModel の一部として渡す必要があります。

列挙型を作成するだけ

public enum OutputFormatType {
    Web
    PDF
}

これをViewModelで使用します

public class MyViewModel {
    ...
    public OutputFormatType OutputFormatter { get; set; }
}

次に、コントローラーアクションに値を割り当てます

public ActionResult ShowReportForWeb()
{
    var model = new MyViewModel { OutputFormatter = OutputFormatType.Web };
    return View("ShowReport", model);
}

public ActionResult ShowReportForPdf()
{
    var model = new MyViewModel { OutputFormatter = OutputFormatType.PDF };
    return View("ShowReport", model);
}

public ActionResult ShowReport(MyViewModel model)
{
    return View(model);
}
于 2012-08-11T18:06:50.633 に答える
1

AlfalfaStrange の回答に、コントローラーのアクションはそれにアタッチされている属性を認識してはならないということを追加したいと思います。つまり、これらの属性は実際には、OnResultExecutingこのデータをインターセプトして のよく知られた場所に挿入するアクション フィルタである必要がありViewDataます。

于 2012-08-11T20:00:51.827 に答える