温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Why is my data binding not working and is always null?
asp.net-core blazor c# http razor

c# - 为什么我的数据绑定不起作用并且总是为空?

发布于 2020-03-27 10:46:05

我正在尝试将数据添加到数据库。我正在尝试Blazor.NET core

这是我在控制器中的代码:

 [Route("AddCarBlazor")]
 [HttpPost]
        public IActionResult PostBlazor(Car car)
        {
            if (car.CarId == 0)
            {
                // New
                car.Created = DateTime.Now;
                _context.Cars.Add(car);
                _context.SaveChanges();
                return Ok();
            }
            else
            {
                // Update
                var c = _context.Cars.First(e => e.CarId == car.CarId);
                c.Brand = car.Brand;
                c.Color = car.Color;
                c.Model = car.Model;
                c.LastChange = DateTime.Now;
                c.TopSpeed = car.TopSpeed;
                _context.SaveChanges();
                return Ok();
            }
        }

我的汽车模型如下所示:

public class Car
    {
        [Key]
        public long CarId { get; set; }
        public string Created { get; set; }
        public string LastChange { get; set; }
        public string Brand { get; set; }
        public string Model { get; set; }
        public string Color { get; set; }
        public long TopSpeed { get; set; }
    }

我这样称呼这个方法:

  private async Task AddCar()
    {
        await Http.PostJsonAsync(baseUrl + "/AddCarBlazor/", carobject);
        await Refresh();
    }

当我填写表格并按添加按钮时,汽车对象始终为null

这是我的数据绑定形式:

<form>
    <div class="row">
        <div class="form-group col-sm-3">
            <label>Brand</label>
            <input input type="text" @bind="@carobject.Brand" class="form-control" placeholder="Enter brand" />
        </div>
    </div>
    <div class="row">
        <div class="form-group col-sm-3">
            <label>Model</label>
            <input type="text" @bind="@carobject.Model" class="form-control" placeholder="Enter model" />
        </div>
    </div>
    <div class="row">
        <div class="form-group col-sm-3">
            <label>Color</label>
            <input type="text" @bind="@carobject.Color" class="form-control" placeholder="Enter color" />
        </div>
    </div>
    <div class="row">
        <div class="form-group col-sm-3">
            <label>TopSpeed</label>
            <input type="number" @bind="@carobject.TopSpeed" class="form-control" placeholder="Enter speed" />
        </div>
    </div>
    <div class="btn-group mr-2">
        <button class="btn btn-danger mr-1" onclick=@AddCar>Save changes</button>       
    </div>
</form>

我在addCar方法上设置了一个断点我从字段中获取值,但是当它进入控制器时,它变为null

我有以下教程:

https://docs.microsoft.com/zh-cn/aspnet/core/blazor/call-web-api?view=aspnetcore-3.0

如何保存字段中的值并将其发送到数据库?

查看更多

查看更多

提问者
Fearcoder
被浏览
162
Fearcoder 2019-07-08 14:24

经过一个周末的研究,我找到了解决方案!

我已经在CarService.cs中更改了我的方法,如下所示:

public async Task AddCar(Car car)
{
        var client = new HttpClient { BaseAddress = new Uri("https://localhost:44369/api/car/") };
        await client.SendJsonAsync(HttpMethod.Post, "AddCar", car);
}

然后在剃刀页面中调用此方法,如下所示:

async Task AddCar()
{
    await CarService.AddCar(car);
    car = new CarService.Car();
    await LoadCarData();
}

我还为服务创建了一个新对象,如下所示:

CarService.Car car = new CarService.Car();

我感动的模型Car.csCarService.cs