2011-09-01 4 views
4

MVC3パーシャルビューにはコントローラが必要ですが、非公開にすることはできますか?

Html.RenderAction(...)

しかし、その同じコントローラは、URLを介してアクセスされることなくを使用して別のビューから呼び出すことができるコントローラを備えており、部分的なビューを作成することが可能です?

したがって、たとえば

public class ArticlesController : Controller 
{ 
    public ActionResult HomeList() 
    ... 
} 

は私のWebページの下部の最新記事の一覧を提供します。

私は誰かが

mysite.com/Articles/HomeList

とで同じリストを見に来たくないしかしだから私は

_Layout.cshtml

からこれを呼び出しますさまざまな理由(セキュリティ、SEOなど)

ありがとう

編集:

私は自分の属性クラスを使用して終了、ラスの助けのおかげで:

public class ChildActionOnly404Attribute : FilterAttribute, IAuthorizationFilter 
{ 
    void IAuthorizationFilter.OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (!filterContext.IsChildAction) 
     { 
      throw new HttpException(404, ""); 
     } 
    } 
} 

答えて

9

は、アクションにChildActionOnlyAttributeを適用します。つまり、それ

  • が唯一のアプリケーション内から呼び出すことなく、直接マッチング経路を介して可能
    1. 私はそれを見つけた

    アクションまたはRenderAction HtmlHelperの拡張メソッドでのみ呼び出すことができますメニューやナビゲーションなどのクロスカッティングの問題に役立ちます。

  • +0

    ありがとうRuss素晴らしい答え。サーバーエラーではなく404を投げる方法を知っていますか?それは理想的なので。 –

    +1

    これを行うには、独自のAction/Authorization FilterAttributeを記述する必要があります。 'OnAuthorization'の中で' filterContext.IsChildAction'をチェックし、子アクションでなければ新しい 'HttpException(404、"エラーメッセージ ")をスローすることができます。 –

    +0

    おかげで再びラス –

    関連する問題