我正在使用作为Razor页面模型(cs)文件的一部分创建的方法来调用Azure表。结果的类型为TenantEntityModel
。我只想在我的视图中显示这些结果。
是否可以这样做,如果可以,我的Razor页面模型需要做什么?
我的Razor模型中的方法具有以下调用:
TenantEntityModel Result = await azureTableConnection.TenantLookupAsync(azureTableConnection, domainName, id);
我以为我可以在视图中使用@Model.Result.DomainName
,但是没有引用该对象,因为在我的Razor模型中不存在Result
。所以我尝试将其添加到我的Razor模型中,如下所示:
public TenantEntityModel Result { get; }
这使我可以在Razor视图中访问Result
的属性。如果将断点放在return Page()
语句之前,我可以看到Result
对象具有我想要的属性。但是,呈现视图时,Model
对象的Result
属性为null,我得到:
NullReferenceException:对象引用未设置为对象的实例。
我还尝试了如下添加BindProperty
:
[BindProperty]
public TenantEntityModel Result { get; }
...但是那也不起作用。因此,我对如何获取查询结果,如何使用来自不同类的模型填充对象,然后使用该对象的结果呈现页面感到困惑。
查看代码:
@page
@model ApiKeyModel
@if (@Model.Result.ApiKey == null)
{
//show the button
<button name="CreateApiKey" type="submit" class="btn btn-primary">Create new API Key</button>
}
控制器代码:
public class ApiKeyModel : PageModel
{
private readonly UserManager<UserRegistrationExtension> _userManager;
private readonly ILogger<PersonalDataModel> _logger;
[BindProperty]
public TenantEntityModel Result { get; set; }
public ApiKeyModel(
UserManager<UserRegistrationExtension> userManager,
ILogger<PersonalDataModel> logger)
{
_userManager = userManager;
_logger = logger;
}
public async Task<IActionResult> OnGet()
{
// need to validate if account exists first
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
var domainName = user.Office365DomainName;
var id = user.Id;
AzureTableConnection azureTableConnection = new AzureTableConnection();
TenantEntityModel Result = await azureTableConnection.TenantLookupAsync(azureTableConnection, domainName, id);
return Page();
}
答案 0 :(得分:1)
要在View
中的PageModel
和Razor Page
之间传递模型,您需要为已定义的模型public TenantEntityModel Result { get; set; }
设置值,而不是定义新的对象{{1} }。
尝试将TenantEntityModel Result
更改为:
OnGet()
答案 1 :(得分:1)
将您的PageModel代码更改为此。您是在创建局部变量TenantEntityModel Result
,而不是为属性分配值。
public class ApiKeyModel : PageModel
{
private readonly UserManager<UserRegistrationExtension> _userManager;
private readonly ILogger<PersonalDataModel> _logger;
[BindProperty]
public TenantEntityModel Result { get; set; }
public ApiKeyModel(
UserManager<UserRegistrationExtension> userManager,
ILogger<PersonalDataModel> logger)
{
_userManager = userManager;
_logger = logger;
}
public async Task<IActionResult> OnGet()
{
// need to validate if account exists first
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
var domainName = user.Office365DomainName;
var id = user.Id;
AzureTableConnection azureTableConnection = new AzureTableConnection();
Result = await azureTableConnection.TenantLookupAsync(azureTableConnection, domainName, id);
return Page();
}
}