2016-12-21 4 views
-1

MVCに新しいのでこれは私の質問です。ASP.net MVC 5別のビューを読み込んで現在のビューを停止する

ユーザーがカテゴリに該当する場合、別のビューをロードしたいと考えています。例として:コントローラー:

namespace toolSwitchboard.Controllers 
{ 
    public class SwitchboardController : Controller 
    { 
     // GET: Switchboard 
     public ActionResult Index() 
     { 
      ViewData["Message"] = "Your application description page for Switchboard."; 
      ViewData["theYear"] = DateTime.Now.Year.ToString(); 

      getMainData(); 

      return View(); 
     } 

    public ActionResult getMainData() 
    {    
     if (UnboundNewClass == "NEW") 
     { 
      return RedirectToAction("Index", "AddPresenter"); //Latest try 
     } 
     else 
     { 
      ViewBag.Admin = false; 
      ViewBag.AddP = false; 
      ViewBag.MyClasses = true; 
      ViewBag.Change = true; 
      ViewBag.New = false; 
      ViewBag.BTT = false; 
      ViewBag.Eval = false; 
      ViewBag.cup = false; 
      ViewBag.SCHEDULE = false; 
      ViewBag.Travel = false; 

      return View(); 
     } 
    } 
    } 
} 

私はパブリッククラスSwitchboardController内でこのコードを呼んでいます。上記AddPresenter図、(配電盤と呼ばれている)まだ負荷電流のビューをロードしていないようやって

けれども。もちろん、私はIndex.cshtmlページにいくつかのRAZORコードがあるので、Switchboardビューをロードするとエラーが発生します。

私が試してみた:

return View("~/Views/AddPresenter/Index.cshtml"); 
return View("AddPresenter", "AddPresenter"); 
return View("../AddPresenter/Index", "AddPresenter"); 
return View("~/AddPresenter/Index", "AddPresenter"); 
return View("~/AddPresenter/Index"); 
return RedirectToAction("AddPresenter", "AddPresenter", null); 
return RedirectToAction("Index", "AddPresenter"); 

どれも動作するようです。彼らは、Switchboard Index.cshtmlページを、必要なAddPresenter Index.cshtmlページの代わりにロードします。

これは、それがエラーを持っている私の配電盤ビューです:

//More code above.... 
<div id="wrapper"> 
    <div id="yellowArea"> 
     <p class="boxStyle">Presentation:</p> 
     <Button class="btn btn-primary btn-large btnCustom1" id="NewT">TRAVEL</Button> 
     <Button class="btn btn-primary btn-large btnCustom2" id="NewE">External</Button> 
     <Button class="btn btn-primary btn-large btnCustom3" id="Credits">Credits</Button> 

     @if (ViewBag.BTT) 
     { 
      <Button class="btn btn-primary btn-large btnCustom4" id="BTT">BTT</Button> 
     } 
    </div> 
    <div id="clearArea1"> 
    //More code below.... 

彼らは唯一配電盤ビューを表示しようとしている場合、私はのみを設定しているためエラーがViewBag.BTTライン上にありますAddPresenterビューではありません。

ビューをロードする方法を修正するには、どのようなことができますか?

+0

あなたは確かに発表者== "NEW"が本当ですか? – Steve

+0

@スティーブはいはい。そこに休憩があって、実際には、もしそれが道筋ならばそれに従ってください。 – StealthRT

+0

try戻り値( "〜/ Views/AddPresenter/Index")。リダイレクトはうまくいくはずだと思うが、 – Steve

答えて

0

私はついにそれを修正しました。それはすべてによって引き起こされた戻るView();は、Switchboard ActionResult Index()メソッドにありました。

はこれにそのコードを変更する:この代わりの

public ActionResult Index() 
{ 
    ViewData["Message"] = "Your application description page for Switchboard."; 
    ViewData["theYear"] = DateTime.Now.Year.ToString(); 

    return getMainData(); 
} 

public ActionResult Index() 
{ 
    ViewData["Message"] = "Your application description page for Switchboard."; 
    ViewData["theYear"] = DateTime.Now.Year.ToString(); 

    getMainData(); 

    return View(); 
} 

は私が配電盤ビューはまだロードされ、エラーが発生することなく、AddPresenterビューをロードすることができました。

使用するリターンRedirectToAction( "Index"、 "AddPresenter");は、私がしようとしたすべてのもののうち、働いていた:

if (UnboundNewClass == "NEW") 
    { 
     return RedirectToAction("Index", "AddPresenter"); 
    } 
    else 
    { 
     ViewBag.Admin = false; 
     ViewBag.AddP = false; 
     ViewBag.MyClasses = true; 
     ViewBag.Change = true; 
     ViewBag.New = false; 
     ViewBag.BTT = false; 
     ViewBag.Eval = false; 
     ViewBag.cup = false; 
     ViewBag.SCHEDULE = false; 
     ViewBag.Travel = false; 

     return View(); 
    } 

感謝を助け、扇動を提供するすべての人に! :o)

1

他のファイルをロードしたいのですが、viewの場合、ビューの名前を渡すだけです。

例えば:

if (presenter == "NEW") 
{ 
    return View("AddPresenter"); 
} else 
{ 
    return View(); 
} 

プレゼンターが== "NEW" の場合、ASP.NETは、 "NameOfTheController \ビュー" で検索します。 指定したビュー名が除外されていない場合、検索は「Views \ Shared」で続行されます。

presenter!= "NEW"の場合、ASP.Netは同じルールに従ってビューを検索します。

return RedirectToAction("Index","NameOfTheController"); 

これは右/NameOfTheController/Indexにあなたをもたらすでしょう:あなたは、他のコントローラにリダイレクトRedirectToActionthisオーバーロードを使用する場合の標準的なビュー名は、(コントローラまたはMethodActionName

です。あなたのケースでは :

Return RedirectToAction("Index","AddPresenter"); 
+0

それは同じエラーを生成するように思えます(そしてSwitchboard Viewの読み込みはまだあります)。 – StealthRT

1

これはあなたのメインコントローラであり、あなたの配電盤:

namespace toolSwitchboard.Controllers 
{ 
    public class SwitchboardController : Controller 
    { 
     // GET: Switchboard 
     public ActionResult Index() 
     { 
      ViewData["Message"] = "Your application description page for Switchboard."; 
      ViewData["theYear"] = DateTime.Now.Year.ToString(); 

      getMainData(); 

      return View(); 
     } 

    public ActionResult getMainData() 
    {    
     if (UnboundNewClass == "NEW") 
     { 
      return RedirectToAction("Index", "AddPresenter"); //Will Redirect you to AddPresenterController.Index() 
     } 
     else 
     { 
      ViewBag.Admin = false; 
      ViewBag.AddP = false; 
      ViewBag.MyClasses = true; 
      ViewBag.Change = true; 
      ViewBag.New = false; 
      ViewBag.BTT = false; 
      ViewBag.Eval = false; 
      ViewBag.cup = false; 
      ViewBag.SCHEDULE = false; 
      ViewBag.Travel = false; 

      return View(); 
     } 
    } 

    } 
} 

あなたAddPresenterクラス:

public class AddPresenterController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); // Potentially put view name here as parameter 
    } 
} 

私はあなたがチェックしたいいくつかのものは、それは次のようになります。

1)Viewsフォルダ内にAddPresenterという名前のフォルダがあります。コントローラがビューにアクセスするには、ビューの下の共有フォルダ(ビュー - >コントローラ名)に自分自身のフォルダ内にある必要があります。

2)そのView-> AddPresenterフォルダーの中に、AddPresentersのIndexメソッドにviewnameを渡す必要がない場合、Indexという名前のビューがあります。

3)ルート(AppStart-> RouteConfig)にはデフォルトルートがあります。

関連する問題