Отправить POST в Blazor от нажатия кнопки и обновить интерфейс после - PullRequest
0 голосов
/ 12 мая 2019

Так что я думаю, что это будет просто, но я не могу заставить его работать на меня.По сути, все, что я пытаюсь сделать, это взять шаблон проекта Blazor на стороне клиента и добавить POST к нажатию кнопки, который обновляет некоторый пользовательский интерфейс на основе того, что возвращается из этого.

POST действительно выходит и получаетответ (как проверено браузером), но пользовательский интерфейс никогда не обновляется.На самом деле, насколько я могу судить, метод блокируется на неопределенный срок.

<p>@callResult</p>

<button class="btn btn-primary" onclick="@IncrementCount">Click me</button>

@functions {
    string callResult = string.Empty;

    async void IncrementCount()
    {
        // Create something to send
        Dictionary<string, string> values = new Dictionary<string, string>();
        values.Add("hello", "world");

        // Encode it
        var content = new FormUrlEncodedContent(values);

        // Send it
        var response = await httpClient.PostAsync("http://...my url...", content);

        // Read response
        callResult = await response.Content.ReadAsStringAsync();        
    }
}

Я понимаю, что, будучи асинхронным вызовом, функция возвращается до того, как у нее появится возможность обновить пользовательский интерфейс, но я даже попытался вызвать this.StateHasChanged () или даже установить ConfigureAwait (false) и до сих пор ничего.

Я уверен, что здесь что-то не так с моим рисунком, но я просто не вижу этого.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 мая 2019

При условии, что ваш HttpClient был правильно настроен (на самом деле все, что вам нужно сделать, это внедрить службу HttpClient в ваш компонент, таким образом: @inject HttpClient httpClient), вы можете сделать следующее:

  • Для вызова используйте следующую сигнатуру метода:

    public static Task PostJsonAsync (это HttpClient httpClient, строка requestUri, содержимое объекта)

Примечание: T isтип, в который тело ответа JSON-десериализовано Blazor

Обратите внимание, что ваш контент сериализуется внутри Blazor до публикации (Json.Serialize)

Надеюсь, это поможет

...