Вот что я пытаюсь достичь - я хочу отправить массив строк из моего контроллера ASP.NET в JavaScript (скомпилированный из TypeScript), который запускается как на стороне сервера (как предварительный рендеринг), так и на стороне клиента (как начальный) государство). Я использую шаблон React-Redux из Visual Studio.
Метод моего контроллера:
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>
}
Часть файла моего загрузочного сервера:
return new Promise<RenderResult>((resolve, reject) => {
actionCreators.addServices(params.data.services);
.......
Мой объект actionCrators выше
export const actionCreators = {
addServices: (services: string[]): AppThunkAction<KnownAction> => (dispatch, getState) => {
dispatch({ 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;
};
Если я установлю некоторые значения в массиве unloadedState
, массив services в initialState заполняется на стороне сервера, и я могу видеть их в источниках моей страницы. Так что моя логика цикла потока в порядке. Я подозреваю, что проблема заключается в передаче массива строк из контроллера в asp-prerender-data
через ViewData.
Пожалуйста, помогите.