2011-01-02 6 views
0

私はアプリケーションにあるアイテムの総数をユーザーに表示するために部分ビューを使用しています。私は現在、私のマスターページ上でこれを持っている:Html.Actionに相当するSDK

私のホームコントローラで

<%= Html.Action("MyItemsTotal", "Home") %>

私が持っているこのアクションメソッド:

 

[ChildActionOnly] 
public ActionResult MyItemsTotal() 
{ 
    FacebookApp app = new FacebookApp(); 
    ViewData["count"] = "0"; 
    int count = 0; 

    if (app.Session != null) 
     count = (from i in db.Items 
        where i.UserID == app.Session.UserId && 
        i.Status != "D" 
        select i).Count(); 

    if (count > 0) 
     ViewData["count"] = count.ToString("#,#"); 

    return PartialView(); 
} 
 

問題はapp.Sessionにもかかわらず、ロードする前にnullであるということですページブラウザで私のURLは次のようになりますので、私はUrl.CanvasActionを使用しています:私は汝

http://apps.facebook.com/mysite/Home

私はFacebookのドメイン内にいる限り、ユーザーのセッションは維持されていますか? apps.facebook.com)...?

私はHtml.Actionを使用していましたが、SDKの最新バージョン(v 4.1.1)をインストールして以来、もはや動作していません... Html.Actionが動作しないように最新バージョンで何かが変更されましたか? ??

Html.Actionと同等のものがあります。たとえば、部分ビューのレンダリングに使用できるHtml.CanvasActionはありますか? (明らかに...そこに1がない)

よろしく、 ロブ

答えて

0

HtmlHelperの、UrlHelperに拡張メソッドを追加しFacebook.Web.Mvcプロジェクト内のいくつかのクラスがありますされているとコントローラクラス。私たちは、すべて同じオーバーロードを扱っている

(あなたは「この」を使用する必要がありますので、コントローラでは、それは拡張機能です)

Html.CanvasAction Url.CanvasAction this.CanvasRedirect:あなたのような拡張機能があります各メソッドのMVCフレームワークに付属しています。

+0

こんにちはネイサン、 私が見つけた唯一のクラスは、ASP.NetのHtml.Actionメソッドに任意の類似点を与えCanvasLinkExtensions.csとCanvasUrlExtensions.csです。私たちはここで同じことを話していますか?あなたは、Html.Actionが部分的な部分のための事前レンダリングされたプロセスであることは明らかです。単なるリンクジェネレータではありません... 私はすべてのプロジェクトのすべてのクラスを検索しました。あなたはHtml.Action、つまりHtml.CanvasActionに相当するものを忘れてしまったと思います。 助言してください... –

+0

Html.Actionは、Asp.Net Webformsと同等の方法でUser Controlに対応しています:-) –

0

偶然にも、私はSDKがどのように機能しているのかと思いました。

SDKの開発者にとっては、優れた仕事をしたことがありますが、少し説明してみてください...ピクチャとデータフローを使用して、人々がyr wonderful sdkをすばやく使用できるようにします!

は、この設定が有効になって自分のFacebookの設定であなたがしている場合:

  • ポストキャンバス

にそれはFacebookがあなたのエンドにセッ​​ションデータやその他の情報を投稿しますと述べている文書を1としてフォームフィールドとしてのポイント。例えば

<input "signed-request" value="...

は彼らが言っていないことは、あなたが自分のドメインで、それはこの唯一の作品であるときということです。それは自分のドメインeの外に何かを投稿しません

http://apps.facebook.com/<yourAppNameHere>

。G:

http://www.<yourAppNameHere>.com

今、あなたはおそらく考えて、よくDAH!しかし、もっと待ってください!

Iframeキャンバスを使用したIframe CanvasがFacebookのアプリケーション設定として有効になっている場合は、ヘルパーメソッドを使用して部分ページをレンダリングしようとすると(効果的にウェブフォームのユーザーコントロール)、これをあなたのページ:あなたはセッションデータを受信しませんHomeコントローラーでMyItemsTotalアクションメソッドでは残念ながら

<% = Html.Action( "MyItemsTotal"、 "ホーム")%>

。 Asp.Net MVCがGet Requestを使用しているため、なぜあなたは質問していますか?

したがって、セッションデータはそのコンテキストに存在しなくなりました。自分のドメインを効果的に呼び出す= Html.Action(「MyItemsTotal」、「ホーム」、新RouteValueDictionary {{「ユーザーID

<%:私の状況で

は私だけので、私は代わりにこのような何かを行うことができますのuserIdを取得したいですよ"、FbApp.Session.UserId}})%>

返信時に質問してください。

もっと良い方法は、FacebookAppが継承するユーザーセッションを維持するためにセッションヘルパークラスを使用することです。すべての目的と目的のために、私は好きなようにそれを使うことができますし、現在のユーザー情報を保存して公開するには十分なインテリジェントです。それでは、ユーザーがFacebookの外からあなたのサイトに入っていくのはどういうことでしょうか?新しいFacebookAppクラスはそれをどのように決定しますか?

私の答えは、どのドメインが本当にそれを呼んでいるのかを知る必要はなく、使用されていない場合は一定の時間内に期限が切れることを知る必要があるだけです。整合性を維持するためには、セッションIDを使用するか、またはアプリケーションに一意識別子facebookを渡す必要があります。

思考のためのいくつかの食品:-P