2017-01-03 18 views
0

this useful responseを実装し、ビューをSharedビューフォルダに移動すると、別のコントローラから呼び出すと初期化されません。共有ビューを正しく初期化する方法

私の呼び出しコード:AccountControllerで

[HttpGet] 
public IActionResult AddressCorrectionList() 
{ 
    if (ValidateSecurityToken()) // ensures the app server thinks we're still logged in 
    { 
     [deleted for clarity] 
     return View(model); 
    } 
    else 
    { 
     return View("Login", new LoginViewModel { ReturnUrl = "/Report/AddressCorrectionList" }); 
    } 
} 

アクションが呼び出されている:

[ActionName("Login"), HttpGet] 
[AllowAnonymous] 
public IActionResult LoginGet(LoginViewModel model) 
{ 
    ViewData["ReturnUrl"] = model.ReturnUrl; // I set a breakpoint here. 

    if (model.ReturnUrl != null) 
    { 
     model.InfoMessage = "Please login to access " + ResourceNameFor(model.ReturnUrl); 
    } 

    ModelState.Clear(); 
    return View(model); 
} 

私が直接ログインページへのリンクをたどる場合は、それが正常に動作します。私のブレークポイントはLoginGetです。

ログインが必要なページへのリンクをたどろうとしても、ログインしていないと正常に動作します。私は正しくログインページにリダイレクトされています。私のブレークポイントはLoginGetです。

Viewを2つのコードスニペットの最初のような別のコントローラから呼び出すと問題が発生します。ログインページが表示されますが、私のブレークポイントはLoginGetではなく、私のReturnUrlは設定されていません。

ValidateSecurityTokenが存在します。アプリケーションはユーザーがログインしているとみなすことがありますが、API呼び出しを行う別のアプリケーションサーバーは独自のタイムアウトルールのためユーザーをログアウトする可能性があるからです。

AddressCorrectionListから私の電話を修正するにはどうすれば私のビューが適切に初期化されますか?

+0

多分いくつかの明確さが役に立ちます。共有ビューを親ビューから部分ビューとして呼び出すのですか?そうでない場合、どのようにレンダリングしていますか? –

+0

これは部分的な表示ではありません。 'Views/Account'ディレクトリにあり、おそらく' _Layout.cshtml'内の 'RenderBody()'呼び出しの中でレンダリングされた "普通の" '.cshtml'ビューです。 (私はあなたが私に尋ねようとしているものの本質を見逃しています。) –

答えて

2

return View("viewName", model)を呼び出すと、cshtmlファイルが指定されたモデルで直接レンダリングされます。 アクションLoginGetは、ビューを返すメソッドを呼び出すと、決してヒットしません。

あなたが探しているのは、RedirectToAction("LoginGet")メソッドを実行するか、そのどれかがオーバーロードされていることです。

+0

あなたは私を正しい道に乗せ、[この回答](http://stackoverflow.com/a/10785274/35142)は画像。私の場合、正しい使い方は 'RedirectToAction(" Login "、" Account "、model);' –

関連する問題