问题描述
我是.Net的新手,并使用.Net核心创建简单的Web应用程序。现在,它使用Razor页面查看其静态内容。
这是项目结构,
现在,我正在根据一些JSON配置使此页面的内容动态化。因此,根据微软的文档,我只是将内容添加到 appsetting.json 文件中以读取json并将其传递给如下所示的视图。
以下是我的appsettings.json,如果我在此处更改此VideoProperties网址,它将在整个应用程序中无处不在。
{
"AllowedHosts": "*","Logging": {
"LogLevel": {
"Default": "Warning"
}
},"MyVars": [
{
"name": "abcd","avatar": "abcd","media": "abcd","category": "abcd","subCategory": "abcd","order": 30,"slide": 30
},{
"name": "abcd","slide": 30
}
],"VideoProperties": {
"EmployeeSpeaksVideoUrl": "abcd1P7vBCYAuFczLD6pojJu0a3xYdbdsdhlj","AppSupportVideoUrl": "abcd1nfi9DvdNOlE2tj2CLUdweIpkT8vyfBnh","ClientSpeaksVideoUrl": "abcd1wvLgpCUJg6cTatI5TjIa-eNBI88JcXlt","CloudVideoUrl": "abcd1ipwoyeGjhq8ouwgfx_NsyS2Xd3ZFCnnK","CovidVideoUrl": "abcd1wvLgpCUJg6cTatI5TjIa-eNBI88JcXlt","FunAtWorkVideoUrl": "abcd14wLg8pM2xNtnd5ZZewism8snlLe9A4Ab","KidsAtWorkVideoUrl": "abcd1PuJVNuaxhfvuG7RMqEwVrzJ1VwsEvjIw","BirthdayVideoUrl": "abcd1JjYoe9TGhWU04qzydyz6OtL2ZT6LS8rB","PongalVideoUrl": "abcd10IKZpaAKCLeiyJ2sTAzdESzzyro0DSGx","WomensDayVideoUrl": "abcd1NLe_TNIin9rcekGUtVEpCpoy_4Cl_SFh","NavratriVideoUrl": "abcd19NyLjLLtPBvz-0iYvMsxt9RQrFko8uSd","ChristmasVideoUrl": "abcd1Siwptmm5r_0p7Y6MR6Y6YbCe_zcJ12fS","AnnualPicnicVideoUrl": "abcd1Dd3atu0vRgGQqVFDJ3ZjiH3YNjdBg_4B","CSRVideoUrl": "abcd1wRmwtnesLkFruwVy-BRjCf-8omWeMtcm","GlanceVideoUrl": "abcd1wvLgpCUJg6cTatI5TjIa-eNBI88JcXlt","HRVideoUrl": "abcd1OA0MyrJz3Ti1HYUH4b3R2Q2yxJsGngig","IntroVideoUrl": "abcd14wLg8pM2xNtnd5ZZewism8snlLe9A4Ab","ITSupportVideoUrl": "abcd1XITYeIFwFaleKiO1Hf3E4u5NnYavSvuz","ProductVideoUrl": "abcd1EgQtDl8nO4xe9ePycMbK42d7Q6pOd_Vi","SecurityVideoUrl": "abcd1XITYeIFwFaleKiO1Hf3E4u5NnYavSvuz","TestingVideoUrl": "abcd12Mx7mJN6tgr7Z80uinPd89BhTuIaZTc7","USVideoUrl": "abcd1wvLgpCUJg6cTatI5TjIa-eNBI88JcXlt"
}
}
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.Configure<VideoProperties>(Configuration.GetSection("VideoProperties"));
services.AddRazorPages();
}
在我的Index.cshtml中,我正在使用的文件类似
@page
@using Microsoft.Extensions.Options;
@inject IOptions<aspnet_core_dotnet_core.Models.VideoProperties> videoUrl
@model IndexModel
@{
ViewData["Title"] = "Mive ";
}
<video width="100%" autoplay muted loop id="my-video" @*style="max-height: 550px;"*@>
<source src=@videoUrl.Value.IntroVideoUrl type="video/mp4">
Your browser does not support HTML5 video.
</video>
这很好。.
我试图以相同的方式在appsettings.json中读取json对象(MyVars)数组,但没有得到值。
我在Startup.cs中更新的配置
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.Configure<VideoProperties>(Configuration.GetSection("VideoProperties"));
services.Configure<List<MyVars>>(options => Configuration.GetSection("MyVars").GetChildren());
services.AddRazorPages();
}
在cshtml我的代码中,
@page
@using Microsoft.Extensions.Options;
@inject IOptions<aspnet_core_dotnet_core.Models.VideoProperties> videoUrl
@inject IOptions<List<aspnet_core_dotnet_core.Models.CeiTour>> tours
@model IndexModel
@{
ViewData["Title"] = "Mive ";
}
<video width="100%" autoplay muted loop id="my-video" @*style="max-height: 550px;"*@>
<source src=@videoUrl.Value.IntroVideoUrl type="video/mp4">
Your browser does not support HTML5 video.
</video>
<div>
@foreach (var item in @tours.Value)
{
<div>@item.Avatar</div>
}
</div>
我的模特,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace aspnet_core_dotnet_core.Models
{
public class MyVars
{
public string Name { get; set; }
public string Avatar { get; set; }
public string Media { get; set; }
public string Category { get; set; }
public string SubCategory { get; set; }
public long Order { get; set; }
public long Slide { get; set; }
}
}
在.cshtml文件中,此for循环没有任何输出。我不确定这里出了什么问题。如何在Razor页面中获取json对象的数组,并且我还需要使用thois到同一页面的javascript。
解决方法
这是一个工作示例:
更改
services.Configure<List<MyVars>>(options => Configuration.GetSection("MyVars").GetChildren());
到
services.Configure<List<MyVars>>(Configuration.GetSection("MyVars"));
RazorPage:
@page
@inject IOptions<List<MyVars>> l
<div>
@foreach (var item in l.Value)
{
<div>@item.Avatar</div>
}
</div>