1

Html.RenderPartial("~/Views/Payments/MyControl.ascx");MyControl.ascxがを直接継承するコントロールである場合、ビューからの呼び出しは機能しますSystem.Web.Mvc.ViewUserControl

ただし、コントロールがから派生した新しいクラスをSystem.Web.Mvc.ViewUserControl継承する場合、への呼び出しは Html.RenderPartial("~/Views/Payments/MyDerivedControl.ascx");失敗し、そのようなビューが存在しないことを報告します。

派生例System.Web.Mvc.ViewUserControl

class MyDerivedControl : System.Web.Mvc.ViewUserControl
{
    public Method()
    {
        ViewData["SomeData"] = "test";
    }
}

回避策はありますか、それとも私がこれを行うべき別の方法がありますか?おそらくHTMLヘルパーですか?

4

1 に答える 1

0

MVCの観点からは、ビューにデータを提供させるのは適切な設計ではありません。通常、これはコントローラーの責任です。コンテキストとこのデータが表す内容に応じて、HTMLヘルパーを使用するか、アクションフィルターを作成できます。カスタムアクションフィルターの例を次に示します。

public class SomeDataActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
        filterContext.Controller.ViewData["SomeData"] = "test";
    }
}

そして、このフィルターでアクションを飾ります。

[SomeDataActionFilter]
public ActionResult Index()
{
    return View();
}
于 2010-03-19T07:18:09.530 に答える