SDK等效于Html.Action

时间:2011-01-02 03:57:32

标签: facebook-c#-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.CanvasAction,所以我在浏览器中的url如下所示:

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

我认为只要我留在facebook域(即apps.facebook.com)中,用户会话就维持了......?

之前我使用的是Html.Action但是因为安装了最新版本的SDK(v 4.1.1)它已经不再工作了......最新版本有什么改变以防止Html.Action现在工作? ?

我是否可以使用Html.Action作为示例Html.CanvasAction来渲染部分视图? (显然那里没有一个......)

此致 罗布

2 个答案:

答案 0 :(得分:0)

Facebook.Web.Mvc项目中有一些类可以为HtmlHelper,UrlHelper和Controller类添加扩展方法。你会发现如下的扩展名:

Html.CanvasAction Url.CanvasAction this.CanvasRedirect(在控制器中,它是一个扩展,所以你必须使用'this')

我们已经为每个方法处理了MVC框架提供的所有相同重载。

答案 1 :(得分:0)

纯粹是偶然的,我想我已经弄清楚了SDK的运作方式!

对SDK开发人员的一个附注,你做得很好,但尝试更好地解释一下......使用图片和数据流,这样人们可以更快地使用你的精彩sdk!

如果在您的Facebook设置中启用了此设置:

  • 发布到画布

根据文档,它说明facebook会将会话数据和其他信息作为表单字段发布到您的终点。 e.g。

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

他们没有说的是,这只适用于您所在的域名,即:

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

它不会在其域外发布任何内容,例如:

http://www.<yourAppNameHere>.com

现在你想想,好吧!但等等还有更多!

如果您喜欢我和您使用带有Iframe Canvas的Asp.Net MVC作为您在facebook中的应用程序设置,那么当您尝试使用辅助方法渲染部分页面(在webforms中有效地进行用户控制)时,您将此包含在页:

&lt;%= Html.Action(“MyItemsTotal”,“Home”)%&gt;

不幸的是,在Home控制器的MyItemsTotal操作方法中,您将不会收到会话数据。为什么要问......因为Asp.Net MVC正在使用Get Request!

因此,您的会话数据不再存在于该上下文中。您有效地呼叫自己的域名。

在我的情况下,我只是想要检索userId,所以我可以做这样的事情:

&lt;%= Html.Action(“MyItemsTotal”,“Home”,新的RouteValueDictionary {{“UserID”,FbApp.Session.UserId}})%&gt;

并在回来时询问。

更好的方法是使用会话助手类来维护FacebookApp继承的用户会话。出于所有意图和目的,我可以以我喜欢的任何方式使用它,并且它足够智能,可以在任何上下文中存储和公开当前用户信息。那么问题就出现了,那么从Facebook外部进入你网站的用户呢,新的FacebookApp类将如何确定?

我的答案是,它不需要知道哪个域名正在调用它,它只需要知道如果它没有被使用它将在一定时间内到期。为了保持完整性,第四个人必须使用会话ID或facebook传递给应用程序的唯一标识符。

有些值得深思的想法:-P