You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC中Razor页面如何调用控制器方法获取返回字符串并展示

首先说明你遇到的方法不可用的原因:

  • ASP.NET Core 已废弃传统ASP.NET MVC中的@Html.Action、@Html.RenderAction方法,旧版本教程的相关用法在Core环境中无法使用
  • @Html.ActionLink是生成超链接<a>标签的辅助方法,本身作用不是调用控制器方法获取返回值,所以会提示找不到对应函数

最优简化方案(仅获取登录用户名无需自定义逻辑)

如果你只是需要获取当前登录用户的用户名,不需要额外自定义处理逻辑,不需要调用控制器方法,Razor视图全局可直接访问框架自带的Identity属性:

@User.Identity?.Name

直接在布局页需要展示用户名的位置写入上述代码即可输出。


如果你的GetLoggedInuser方法包含其他自定义业务逻辑,可选择以下任意一种可行方案实现:

方案1:使用视图组件(官方推荐替代旧版Action的方案)

视图组件是ASP.NET Core专门用来替代原有Html.Action能力的实现,适合需要处理逻辑后输出部分视图内容的场景:

  1. 在项目中新建ViewComponents目录,新增视图组件类:
public class LoggedInUserViewComponent : ViewComponent
{
    public IViewComponentResult Invoke()
    {
        // 写入你原GetLoggedInuser方法中的业务逻辑
        return Content("garse garsebro");
    }
}
  1. 在布局页中直接调用组件即可输出返回内容:
@await Component.InvokeAsync("LoggedInUser")

方案2:抽取公共服务注入Razor视图

适合逻辑通用、多处需要调用的场景:

  1. 定义公共服务接口与实现:
// 接口定义
public interface IUserService
{
    string GetLoggedInUser();
}

// 实现类
public class UserService : IUserService
{
    public string GetLoggedInUser()
    {
        // 写入业务逻辑
        return "garse garsebro";
    }
}
  1. 在Program.cs中注册服务:
builder.Services.AddScoped<IUserService, UserService>();
  1. 在布局页顶部注入服务后直接调用:
@* 页面顶部注入服务 *@
@inject IUserService UserService

@* 需要展示的位置直接调用方法 *@
@UserService.GetLoggedInUser()

方案3:AJAX异步调用控制器接口

适合需要异步刷新、不阻塞页面首次渲染的场景:

  1. 给控制器方法添加[HttpGet]特性标记为可访问路由:
[HttpGet]
public string GetLoggedInUser()
{
    return "garse garsebro";
}
  1. 布局页中添加占位标签,通过JS请求接口获取内容:
<span id="loggedInUser"></span>

<script>
fetch('/Home/GetLoggedInUser')
    .then(response => response.text())
    .then(userName => {
        document.getElementById('loggedInUser').innerText = userName;
    })
</script>

内容的提问来源于stack exchange,提问作者Grazosi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:15:03