【发布时间】:2021-03-08 17:11:32
【问题描述】:
我已按照教程 HERE 向 API 发出 POST 请求,并且效果很好;我已成功请求 -> 收到 -> 并处理了数据。
我现在正在尝试扩展我学到的知识并将其用于我更大的应用程序中,但我不知道该怎么做。
我使用Index.razor 页面作为我的“根”页面。在这个根页面中,我有一些逻辑来决定在页面上显示什么。如果没有要处理的结果,我会显示搜索输入表单 (DefaultSearch.razor)。如果有要处理的结果,我会显示这些结果 (SearchResultsPage.razor)。
我的问题是我不知道如何(1)将输入的查询字符串从DefaultSearch.razor组件发送回根页面进行处理,(2) strong> 如何将返回的处理结果发送到SearchResultsPage.razor 组件进行显示。
Index.razor:
@page "/"
<div class="text-center">
<HeaderLarge />
@if (fetchedResults == null)
{
<DefaultSearch />
} else {
<SearchResultsPage />
}
</div>
@code {
try
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(@"http://192.168.1.234:8080");
Search search = new Search(queryString);
string searchstr = JsonConvert.SerializeObject(search);
StringContent content = new StringContent(searchstr, Encoding.UTF8, "application/json");
using HttpResponseMessage httpResponse = await client.PostAsync(("/api/...", content);
httpResponse.EnsureSuccessStatusCode();
if (httpResponse.StatusCode == System.Net.HttpStatusCode.OK)
{
string response = await httpResponse.Content.ReadAsStringAsync();
fetchedResults = JsonConvert.DeserializeObject<SearchResultSet>(response);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
DefaultSearch.razor:
<div id="SearchContainer">
<div id="SearchFormContainer">
<input id="mainSearchInputField" name="queryString" type="text" /><button @onclick()>Search</button>
</div>
</div>
@code {
}
SearchResultsPage.razor:
@page "/search"
<h3>SearchResultsPage</h3>
<div>
@if (fetchedResults != null)
{
@foreach (var result in fetchedResults.documents)
{
<div>
<table class="message">
<tr>
<td>Subject</td>
<td>@(result.subject)</td>
</tr>
<tr>
<td>ID</td>
<td>@result.docId</td>
</tr>
<tr>
<td class="message_body" colspan="2">
<span>@(result.messageBody)</span>
</td>
</tr>
</table>
</div>
}
}
</div>
@code {
[Parameter]
public SearchResultSet fetchedResults { get; set; }
}
【问题讨论】:
-
Index.razor只是您想要的一个例子吗?这不是一个有效的剃须刀组件@code块。 -
@ConnorLow 是的,但它应该是有效的。我从我的工作测试程序中复制了我的代码。如果这一切都不存在,那么我一定是忘记了什么。我成功地从 API 取回数据,所以这不是我需要帮助的。但是,总的来说,这就是我想要的。
-
您使用的是 .NET 5?您不能将
try直接放入@code块中:它应该被包装在一个方法中。本质上,您将该代码放在类定义中,但它应该放在方法定义中。 -
@ConnorLow 谢谢,但这不是我想要的。我需要了解如何获取从
DefaultSearch.razor到Index.razor的提交数据以及从Index.razor到SearchResultsPage.razor的结果。 -
我知道,这就是为什么它是一个评论 :) 我认为知道它仍然很有帮助,而且你的代码看起来太具体而不能作为一个例子,所以我问了。