#c# #asp.net #oop #asp.net-core #razor-pages
#c# #asp.net #ооп #asp.net-core #razor-страницы
Вопрос:
Скриншоты ниже для пояснения
Используя razor pages, у меня есть страница под названием Products, на которой отображается продукт; изображение, название, цена и т.д. Эти сведения получены в моем методе get с использованием идентификатора, переданного с предыдущей страницы.
Я инициализирую свойство с именем Product типа Product для объекта, возвращаемого методом, чтобы получить product. Однако, когда OnPost()
вызывается метод, сохраняется только идентификатор продукта в объекте (и я знаю, что это потому, что Id передается как параметр и, следовательно, легко доступен), все остальные отдельные фрагменты данных теряются. Я не могу понять, почему, заранее спасибо.
Продукт
public class ProductModel : PageModel
{
public string Identity { get; set; }
public Product Product { get; set; }
private readonly IShopService _shopService;
private readonly UserManager<IdentityUser> _userManager;
public ProductModel(UserManager<IdentityUser> userManager, IShopService shopService)
{
_userManager = userManager;
_shopService = shopService;
}
private Task<IdentityUser> GetCurrentUserAsync() => _userManager.GetUserAsync(HttpContext.User);
public void OnGet(int id, string identity)
{
Product = _shopService.GetProduct(id);
Identity = identity;
}
public void OnPost()
{
_shopService.AddProductToBag(Product, GetCurrentUserAsync().Result);
}
}
На скриншоте выше показано, что происходит Product
после GetProduct()
выполнения. Он заполнен данными базы данных. Когда я пытаюсь использовать одни и те же данные для AddProductToBag
в OnPost()
каждом поле равно null.
Комментарии:
1. Пожалуйста, покажите нам публикуемую полезную нагрузку из Chrome Developer Tools (вкладка Сеть).
2. Я никогда не отправляю весь объект по Сети, только идентификаторы, поскольку я всегда могу использовать их для получения объектов из базы данных, показанный снимок экрана
Product
после_shopService.GetProduct(id);
выполнения. Это не передается через Интернет, я сохраняю объект в приложении, которое будет использоваться дляAddProductToBag()
inOnPost()
. Вы все еще хотите, чтобы я показывал полезную нагрузку? @mjwills3.
OnGet
Вызывается по веб-запросу, отличному отOnPost
. Вам нужно передать данные из браузера на сервер. Или вызовGetProduct
вOnPost
.4. спасибо, что помогло! @mjwills