Я тестирую с Blazor и GRP c, и я пытаюсь следовать этому уроку (https://www.youtube.com/watch?v=ynZlJ3pACpI), который, кажется, устарел. В любом случае, с некоторыми адаптациями это должно работать, даже если там не так много примеров или учебных пособий. Проблема в том, что значение элемента html не обновляется с помощью ответа grp c.
Я предпочитаю иметь это:
@page "/greeter"
@inject GrpcService1.GreeterService GreeterService1
@using BlazorApp1.Data
<h1>Grpc Connection</h1>
<input type="text" @bind="@Name" />
<button onclick="@SayHello">Button</button>
<p>@Greetmsg</p>
@code {
string Name;
private string Greetmsg;
async void SayHello()
{
this.Greetmsg = await this.GreeterService1.SayHello(this.Name);
}
}
Но что-то могло иметь был обновлен, потому что я не могу вызвать метод SayHello таким образом. Я должен поставить @ перед Onclick, в противном случае я получаю ошибку «Невозможно преобразовать группу методов в тип делегата». Поэтому я сформулировал это так:
<button @onclick="SayHello">Button</button>
Таким образом, это работает, но результат, который я получаю от сервера grp c, отображается только при нажатии кнопки для следующего запроса. Я выполнил код executuin и запрос сделан, ответ приходит, но значение на странице не обновляется. Затем выполнение кода заканчивается и все еще не обновляется. Когда я нажимаю кнопку для нового запроса, значение как-то обновляется.
Я также добавляю еще одну кнопку
<button @onclick="SayHello">SayHello</button>
<button @onclick="updateGreetmsg">updateGreetmsg</button>
с пустой функцией под другой
public void updateGreetmsg()
{
}
И достаточно вызвать эту функцию, чтобы было показано ранее полученное значение. Таким образом, функция await не работает в первой функции, где t должен.
Кто-нибудь знает, как решить эту проблему?