Как получить строковый аргумент на событии @onclick в Blazor? - PullRequest
0 голосов
/ 31 октября 2019

Я возиться с шаблоном приложения Blazor, созданным в Visual Studio 2019. Я знаю, что в проекте используется ASP.NET Core 3.0, но какая это версия Blazor, я не знаю. Хотя он будет довольно новым, так как я возился с ним всего несколько дней.

Конечный результат: мне нужно было передать идентификатор на другую страницу Blazor с помощью параметра URL.

Бит, на котором я застрял: он говорит: https://docs.microsoft.com/en-us/aspnet/core/blazor/routing?view=aspnetcore-3.0

Используйте Microsoft.AspNetCore.Components.NavigationManager для работы с URI и навигацией в коде C #. NavigationManager предоставляет событие и методы, показанные в следующей таблице. Поэтому по этой причине я добавил значок с событием @onclick, который при нажатии должен использовать NavigationManager для перехода на другую страницу, но с идентификатором в URL.

Я получаю эту ошибку дляприведенный ниже код:

Ошибка CS7036 Не указан аргумент, соответствующий необходимому формальному параметру 'linkAddress' из '__generated__CarsMainView.Navi (string, int)'

Вот мой код:

    @if (Cars == null)
    {
        <p><em>Loading...</em></p>
    }
    else
    {
        @foreach (var car in Cars)
        {
            <div class="card">
                <img class="card-img-top" src="@car.ImageUrl" alt="Place holder" @onclick="(e => Show(car.Id))" data-toggle="modal" data-target="#carModal" />
                <div class="card-body">
                    <h5 class="card-title">@car.Make @car.Model</h5>
                    <p class="card-text">@car.Description</p>
                    <a href="@car.Url" class="btn btn-primary">Wiki</a>
                    <span class="fa fa-fighter-jet" @onclick="(() => Navi("carMoved", car.Id)"></span>
                </div>
                <div class="card-footer">
                    <button class="btn btn-secondary"></button>
                </div>
            </div>

        }

    }


@code{
    private void Navi(string linkAddress, int id)
    {
        navigationManager.NavigateTo($"{linkAddress}/{id}");
    }

    List<CarDetail> Cars;
    CarDetail CarToInsert;

    protected async Task Load()
    {
        Cars = await carService.GetCarsAsync();
    }

    protected override async Task OnInitializedAsync()
    {
        await Load();
        CarToInsert = new CarDetail();
    }


}



In the code above I want to send a string value containing the address to another page and an int value with the ID of the car. these values are passed into Navi(string, int) which should then direct me to that page.  Problem is the string value is gives me the error mentioned above.

I know what you're thinking... I should use single quotes in my @onclick, so it would look like this instead.
``````````````````````````````````````
@onclick="(() => Navi('carMoved', 1)"

``````````````````````````````````````

I tried that. Problem is I get this error: 
>Too many characters in character literal


Any help would be much appreciated

1 Ответ

0 голосов
/ 31 октября 2019

Точно ... Я маппет.

Я просто изменил кавычки, так что из этого вышло: <span class="fa fa-fighter-jet" @onclick="(() => Navi("carMoved", 1))"></span> вот это: <span class="fa fa-fighter-jet" @onclick='(() => Navi("carMoved", 1))'></span>

Теперь это работает.

...