ASP.net MVC 5加载另一个视图并停止当前视图

时间:2016-12-21 21:15:21

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5

MVC新手所以这是我的问题。

如果用户属于某个类别,我想加载另一个视图。举个例子:

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:Controller 中调用此代码。

虽然执行上述操作似乎并未加载 AddPresenter 视图,而仍然加载当前视图(称为切换面板)。当然,在加载 Switchboard 视图时会出现错误,因为我在Index.cshtml页面上有一些RAZOR代码,它没有任何数据。

我试过了:

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 View < /强>

为了纠正我加载视图所需的方式,我可以做些什么?

3 个答案:

答案 0 :(得分:1)

我想加载其他view您只需传递视图名称。

e.g:

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

如果presenter ==“NEW”,ASP.NET将搜索“Views \ NameOfTheController”。 如果给定的视图名称不存在,则搜索将在“Views \ Shared”中继续。

如果演示者!=“新”,ASP.Net将遵循相同的规则来查找视图。标准视图名称是ActionName(或控制器中的Method

如果要重定向到其他控制器,请使用RedirectToAction的{​​{3}}重载:

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

这将使您正确/NameOfTheController/Index。 在你的情况下:

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

答案 1 :(得分: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的文件夹。为了让控制器访问视图,它必须位于自己的文件夹(Views-&gt; ControllerName)或视图下的共享文件夹中。

2)在Views-&gt; AddPresenter文件夹中,你有一个名为Index的视图,如果你不需要将viewname传递给AddPresenters返回的Index方法。

3)您的路线(AppStart-&gt; RouteConfig)具有默认路线。

答案 2 :(得分:0)

好吧,我终于修好了。这完全是由 Switchboard ActionResult Index()方法中的返回View(); 引起的。

将该代码更改为:

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)