DNN 9.13 Razor主机模块:如何用QueryString参数获取指定UserID数据
DNN 9.13 Razor主机模块获取指定UserID用户数据的修正方案
问题原因
两段代码无法运行的核心是类型不匹配+语法错误:
Request.QueryString["userid"]返回字符串类型,而UserController.GetUserById(int portalId, int userId)的第二个参数要求整数类型- 第一段错误代码里,在方法参数中给变量
querystringuserid额外加了@,属于Razor语法误用
修正后的完整代码(安全版)
@using DotNetNuke.Common; @using DotNetNuke.Entities.Users; @{ var currentUserId = UserController.Instance.GetCurrentUserInfo().UserID; // 安全转换QueryString参数为整数,同时处理空值/非数字场景 if (int.TryParse(Request.QueryString["userid"], out int targetUserId)) { var targetUser = UserController.GetUserById(0, targetUserId); if (targetUser != null) { <p>指定用户昵称:@targetUser.DisplayName</p> <p>用户邮箱:@targetUser.Email</p> } else { <p>未找到对应ID的用户</p> } } else { <p>URL中的userid参数无效或未提供</p> } }
关键修正点
- 类型转换:用
int.TryParse实现字符串到整数的安全转换,避免直接强制转换引发的运行时异常 - 语法修正:调用方法时变量前无需加
@,直接使用变量名即可 - 空值校验:增加用户对象为空的判断,避免无效UserID导致的空引用错误
简化版(仅演示核心逻辑,不做异常处理)
如果不需要错误处理,仅做基础功能实现:
@using DotNetNuke.Entities.Users; @{ int targetUserId = int.Parse(Request.QueryString["userid"]); } @UserController.GetUserById(0, targetUserId).DisplayName
注意:此写法在userid参数为空或非数字时会抛出异常,仅适合参数格式确定的场景
内容的提问来源于stack exchange,提问作者Lu Ma
相关产品推荐
相关产品推荐

