1

私は MVC を初めて使用します。あるコントローラーから別のコントローラーに変数値を渡す方法について、ここでアドバイスをお願いします。基本的に、私が達成したいのは Facebook 認証を実行することです。認証が成功した後、新しいビューでさらに処理するために別のコントローラーに渡したいAccessToken値とフルパス変数値を取得する必要があります。これまでに行ったことに意味があるかどうかはわかりません。

次のような ActionResult メソッドがあります (わかりやすくするために簡略化されています)。

[HttpPost]
public ActionResult Index(string facebookUID, string facebookAccessTok)
{
    string fbUID = facebookUID;
    string fbAcess = facebookAccessTok;
    var fullpath = "";

    string uploadPath = Server.MapPath("~/upload");
    fullpath = uploadPath + "\\ProfilePic.png";

    return null;
}

私のインデックスビューでは:

<script type="text/javascript">
    var uid = 0;
    var accesstoken = '';

    function grantPermission() {
        window.FB.login(function (response) {
            if (response.authResponse) {
                uid = response.authResponse.userID;
                accesstoken = response.authResponse.accessToken;
                var postData = { facebookUID: uid, facebookAccessTok: accesstoken };
                $.ajax({
                    type: 'POST',
                    data: postData,
                    success: function () {
                        // process the results from the controller action
                        window.location.href = "Publish";
                    }
                });
            } else {
                alert('User cancelled login');
            }
        }, { scope: 'publish_stream' });
    };

上記のビュー内で、別のページ呼び出し " Publish " へのリダイレクトを行います。そのコントローラー インデックス ActionResult には、さらに処理するためにfbAcessフルパス変数の値が必要です。値を渡す方法をアドバイスしてください。

4

2 に答える 2

3

リダイレクトを使用します。

[HttpPost]
public ActionResult Index(string facebookUID, string facebookAccessTok)
{
    string fbUID = facebookUID;
    string fbAcess = facebookAccessTok;
    var fullpath = "";

    string uploadPath = Server.MapPath("~/upload");
    fullpath = uploadPath + "\\ProfilePic.png";

    return RedirectToAction("Publish", "TheOtherController", new { fbAccess = fbAccess, fullpath = fullpath });
}

public class TheOtherController : Controller
{
    public ActionResult Publish(string fbAccess, string fullpath)
    {
        // Do whatever you want
        //
    }
}

これは、標準フォームを使用してデータをIndexメソッドに送信した場合に機能します。データを送信するために Ajax を維持する場合は、次のようにコードを変更します。

[HttpPost]
public ActionResult Index(string facebookUID, string facebookAccessTok)
{
    string fbUID = facebookUID;
    string fbAcess = facebookAccessTok;
    var fullpath = "";

    string uploadPath = Server.MapPath("~/upload");
    fullpath = uploadPath + "\\ProfilePic.png";

    var redirectUrl = new UrlHelper(Request.RequestContext).Action("Publish", new { fbAcess = fbAcess, fullpath = fullpath });
    return Json(new { Url = redirectUrl });
}

そして、あなたのクライアントコードで:

$.ajax({ type: 'POST',
         data: postData,
         dataType: 'json',
         success: function (response) {               
             window.location.href = response.Url;
         }
});
于 2012-08-14T10:38:29.667 に答える
1

認証が成功したら、次のメソッドを呼び出します

return RedirectToAction("ActionName", "Controller", new {variable1 = value1, variable2 = value2/*...etc*/});
于 2012-08-14T10:38:15.077 に答える