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 < /强>
为了纠正我加载视图所需的方式,我可以做些什么?
答案 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)