Asp.net core 将字符串数组从控制器发送到ASP.NET核心服务器端呈现JavaScript
以下是我试图实现的目标-我想将一个字符串数组从我的ASP.NET控制器发送到JavaScript(从TypeScript编译),该JavaScript在服务器端(作为预渲染)和客户端(作为初始状态)运行。我正在使用VisualStudio中的React Redux模板 我的控制器方法:Asp.net core 将字符串数组从控制器发送到ASP.NET核心服务器端呈现JavaScript,asp.net-core,server-side-rendering,serverside-javascript,prerender,visual-studio-templates,Asp.net Core,Server Side Rendering,Serverside Javascript,Prerender,Visual Studio Templates,以下是我试图实现的目标-我想将一个字符串数组从我的ASP.NET控制器发送到JavaScript(从TypeScript编译),该JavaScript在服务器端(作为预渲染)和客户端(作为初始状态)运行。我正在使用VisualStudio中的React Redux模板 我的控制器方法: public IActionResult Index() { ViewData["Services"] = new string[] { "ServiceA", "ServiceB
public IActionResult Index()
{
ViewData["Services"] = new string[] { "ServiceA", "ServiceB" };
return View();
}
我的cshtml视图文件:
@{
ViewData["Title"] = "Home Page";
dynamic data = new
{
services = ViewData["Services"] as string[]
};
}
<div id="react-app" asp-prerender-module="ClientApp/dist/main-server" asp-prerender-data=data>Loading...</div>
@section scripts {
<script src="~/dist/main-client.js" asp-append-version="true"></script>
}
@{
ViewData[“Title”]=“主页”;
动态数据=新数据
{
services=ViewData[“services”]作为字符串[]
};
}
加载。。。
@节脚本{
}
我的启动服务器文件部分:
return new Promise<RenderResult>((resolve, reject) => {
actionCreators.addServices(params.data.services);
.......
返回新承诺((解决、拒绝)=>{
actionCreators.addServices(params.data.services);
.......
我上面的actionCrators对象是
export const actionCreators = {
addServices: (services: string[]): AppThunkAction<KnownAction> => (dispatch, getState) => {
dispatch({ type: 'ADD_SERVICES', services: services });
}
};
export const actionCreators={
addServices:(services:string[]):AppThunkAction=>(dispatch,getState)=>{
分派({type:'ADD_SERVICES',SERVICES:SERVICES});
}
};
映射到此减速器的:
const unloadedState: ServicesState = { services: [] };
export const reducer: Reducer<ServicesState> = (state: ServicesState, incomingAction: Action) => {
const action = incomingAction as KnownAction;
switch (action.type) {
case 'ADD_SERVICES':
return {
services: action.services
};
default:
// The following line guarantees that every action in the KnownAction union has been covered by a case above
const exhaustiveCheck = action;
}
// For unrecognized actions (or in cases where actions have no effect), must return the existing state
// (or default initial state if none was supplied)
return state || unloadedState;
};
const unloadedState:ServicesState={services:[]};
导出常量减速机:减速机=(状态:ServicesState,incomingAction:Action)=>{
常量动作=作为已知动作输入动作;
开关(动作类型){
案例“添加服务”:
返回{
服务:action.services
};
违约:
//下一行保证KnownAction union中的每一项操作都包含在上述案例中
const defactvecheck=动作;
}
//对于无法识别的操作(或在操作无效的情况下),必须返回现有状态
//(如果未提供,则为默认初始状态)
返回状态| |未加载状态;
};
如果我在unloadedState
数组中设置了一些值,则initialState中的服务数组将在服务器端填充,并且我可以在页面的视图源中看到它们。因此,我的通量循环逻辑很好。我怀疑问题是通过ViewData将字符串数组从控制器传递到asp预渲染数据
请提供帮助。为什么不直接使用模型并将其传递给视图?因为传递的内容不多,我只想传递字符串数组,而模型就太复杂了。我觉得看看这个,然后看看你传递给帮助者的内容。我的建议是:首先手动尝试,如示例所示,以证明它是有效的,然后就应该我将告诉您应该如何将其传递给属性。