c# - 使用 asp.net core 2.1 执行获取操作
问题描述
我正在研究 asp.net core 2.1
现在我们有如下类的视图:
每个视图都有自己的类,我的类有OnGet()
方法,所以我认为这是页面加载时的 Get 请求。但是我在该方法中设置了断点并且从未命中。
我想做一个简单的方法来在我的视图中做一个 SelectList,比如:
public void OnGet()
{
var roles = _roleManager.Roles.ToList();
List<SelectListItem> item = roles.ConvertAll(a =>
{
return new SelectListItem()
{
Text = a.Id.ToString(),
Value = a.Name.ToString(),
};
}).ToList();
var vm = new ApplicationRoleViewModel();
vm.RolesToUser = roles
.Select(a => new SelectListItem()
{
Value = a.Id.ToString(),
Text = a.Name
})
.ToList();
return ;
}
看法:
<select asp-for="RoleId" asp-items="@Model.RolesToUser">
<option>Please select one</option>
</select>
但它总是抛出 null 因为它从不返回结果OnGet()
,我的问题是。如何在这种新的视图结构中执行简单的获取操作!问候完整代码:
AssignRoleToUser.cshtml.cs
namespace Security.WebUi.Pages
{
public class AssignRoleToUserModel : PageModel
{
private readonly RoleManager<ApplicationRole> _roleManager;
public AssignRoleToUserModel(
RoleManager<ApplicationRole> roleManager
)
{
_roleManager = roleManager;
}
public void OnGet()
{
var roles = _roleManager.Roles.ToList();
List<SelectListItem> item = roles.ConvertAll(a =>
{
return new SelectListItem()
{
Text = a.Id.ToString(),
Value = a.Name.ToString(),
};
}).ToList();
var vm = new ApplicationRoleViewModel();
vm.RolesToUser = roles
.Select(a => new SelectListItem()
{
Value = a.Id.ToString(),
Text = a.Name
})
.ToList();
return ;
}
}
}
看法:
@page
@model Security.Dto.ViewModels.ApplicationRoleViewModel
<h4>Assign role to user</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<select asp-for="RoleId" asp-items="@Model.RolesToUser">
<option>Please select one</option>
</select>
<br />
@section Scripts {
}
应用角色视图模型:
namespace Security.Dto.ViewModels
{
public class ApplicationRoleViewModel
{
public Guid RoleId { get; set; }
public List<SelectListItem> RolesToUser { get; set; }
}
}
解决方案
显然,您正在使用 Razor Page。使用 Razor Pages,视图模型就是它PageModel
本身,即您的代码隐藏文件。在您的OnGet
操作中,您正在新建一些随机类,并在其上设置一个属性,但随后它只会被垃圾收集。相反,您应该自己拥有此RolesToUser
属性PageModel
,并设置:
public IEnumerable<SelectListItem> RolesToUser { get; set; }
...
public void OnGet()
{
var roles = _roleManager.Roles.ToList();
RolesToUser = roles.Select(a => new SelectListItem()
{
Value = a.Id.ToString(),
Text = a.Name
}).ToList();
}
推荐阅读
- python - 脚本通过IDLE运行时找到需要的文件,但通过终端运行时找不到文件
- python - 使用 Python 解析 DOM 以提取数据
- python - 熊猫计算时间序列重采样
- php - 当我有子模块时如何配置 services.yaml?
- java - 我怎样才能对这个相等的最后一个块进行junit测试?
- javascript - AWS Cognito - 登录后立即使用刷新令牌
- asp.net-core - 可以在现有的 ASPNET.Core Web 项目中调用和/或使用 Worker 服务吗?
- amazon-web-services - 如何使用 URL 中的版本控制将多个 API 网关映射到同一个自定义域
- while-loop - 使用 tail 监控活动的日志文件
- php - 如何检查时间是否超过一个小时?