【问题标题】:ASP.NET MVC - How do I Call a Controller Method from within a View to Redirect to Multiple Other Views?ASP.NET MVC - 如何从视图中调用控制器方法以重定向到多个其他视图?
【发布时间】:2020-04-03 21:04:53
【问题描述】:

我正在尝试在我的导航栏中添加一个链接,该链接根据用户的帐户类型将用户重定向到不同的网页。我在执行此操作时遇到问题,需要一些帮助。

我调用的控制器代码如下所示:

public IActionResult Attendance(char accountType)
{
     if (accountType.Equals("m") || accountType.Equals("a"))
     {
          return RedirectToAction("FacultyAttendance");
     }
     else
     {
          return RedirectToAction("StudentAttendance");
     }
}

public IActionResult StudentAttendance()
{
     // More functionality will be added later
     return View();
}

public IActionResult FacultyAttendance()
{
     // More functionality will be added later
     return View();
}

按照this answer调用Controller方法,我在View文件中有这段代码sn-p:

<a href="<%: @Url.Action("Attendance", "HomeController", new {accountType = "m"}) %>">Attendance</a>

这给了我以下错误:

错误请求 - 无效网址

HTTP 错误 400。请求 URL 无效。

我还尝试通过删除<%:%> 来关注this answer

<a href="@Url.Action("Attendance", "HomeController", new {accountType = "m"})">Attendance</a>

如果我这样做,我只会得到空白网页。

我的第一个问题在于视图文件中的这个方法调用应该使用哪种样式。这些中的任何一个都是正确的,还是我应该完全使用其他东西?问题可能出在我设置控制器代码的方式上吗?

任何帮助将不胜感激,因为我是 ASP.NET 的 MVC 框架的新手。

编辑: 我找到的解决方案与我最初发布的有点不同。我在我的视图中使用了这个标签并让它工作:

<a asp-controller="Home" asp-action="Attendance" asp-route-accountType='s'>Attendance</a>

我还关注ThisGuy's suggestions 改进代码,因为我对一些变量管理不善,这可能是问题的一部分。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core redirect


    【解决方案1】:

    accountType 是一个字符,但你传递的是一个字符串:

    new {accountType = "m"}
    

    将控制器更改为 accountType 采用字符串而不是 char。

    public IActionResult Attendance(string accountType)
    

    另外,我会这样写:

    public IActionResult Attendance(string accountType) => 
        RedirectToAction(
            accountType.Equals("m") || 
            accountType.Equals("a") 
                ? nameof(FacultyAttendance)
                : nameof(StudentAttendance));
    

    【讨论】:

    • 很好地抓住了字符串与字符。我将其更新为正确的数据类型。感谢您设置比较的替代方法,我想我可以使用它。但是,这些更改都没有解决我遇到的问题。通过单击调用该方法的链接,我仍然会收到 HTTP 错误 400 代码。
    • 它应该是“Home”而不是“HomeController”。
    猜你喜欢
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    相关资源
    最近更新 更多