1

RedirectToAction または Redirect の代わりに別のビューを表示するパスを書き換える方法はありますか? URL を変更したくありませんが、通常の RewritePath を「返す」ことができないことに注意してください。そのため、アクションは実際にはその後も続きます!

public ActionResult Register(){
    if (somehting){
        HttpContext.RewritePath(url);
        // I want it to stop here, somehow, but it keeps going and expects a return statement
    }
    return View();
}

更新: F5 を実行すると、stackoverflow (ProcessRequest を使用) で循環するものを使用するときに気付きましたが、直接アクセスすると、「'HttpContext.SetSessionStateBehavior' は 'HttpApplication.AcquireRequestState' イベントの前にのみ呼び出すことができます。上げられます。」これは、IIS セットアップで何か不足していることを意味します。それは何ですか? :s

[更新]これを明確にするために、アクションまたはビュー名ではなく「url」を書き直す必要があります。古き良き RewritePath(url) のように、URL でなければなりません。

4

4 に答える 4

1

これは、返されたビューを処理するメソッドを作成するという Stephen の回答に触発されて、私が最終的に行ったことです。

まず、HomeController.cs の下のグローバル メソッド (ここでは Timeout in Home コントローラーという名前):

public ActionResult TimeOut(){
    return View("TimeOut"); // the string is essential
}

その他の場合:

if (soemthing){
    return new HomeController().TimeOut(); }

異議はありますか?不正行為?

于 2012-05-31T09:33:57.390 に答える
1

アクション リダイレクトのみの場合:

使用サンプルreturn RedirectToAction("Action","Controller",new {id=1});

URL リダイレクトの場合:

使えるreturn Redirect(URL);

HttpContext.RewritePath(url); の後の式も response.end(); を使用します。

于 2012-05-26T14:38:59.303 に答える
0

Cyril の回答に加えて、別の Controller メソッドを直接呼び出して、そのメソッドの結果を返すことができます。返したいものを返す次のようなメソッドがあるとします。

    public ActionResult SpecialRegistration()
    {
       //TODO:  implement logic that does stuff
       return View();  // Shows the View named SpecialRegistration
    }

これで、通常の Register メソッドで呼び出すことができます

    public ActionResult Register(){
        if (something){
            return SpecialRegistration();
        }
   }
于 2012-05-30T17:24:39.320 に答える
0

モデルが異なる別のビューを返しても、URL は変更されません。

たとえば、Hello.cshtml というビューがあるとします。

return View('Hello',Model);

したがって、アクションとは異なるビューを返します。URL は同じままで、ユーザーのビューが変更されます。

于 2012-05-30T06:46:08.890 に答える