Когда я загружаю свой HTML-код PartialView с помощью jquery, контроллер, который я не вызывал, вызывается с параметром иC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Когда я загружаю свой HTML-код PartialView с помощью jquery, контроллер, который я не вызывал, вызывается с параметром и

Сообщение Anonymous »

У меня есть этот View Edit.cshtml
@model ProdutoViewModel

@{
Layout = "_Layout";
}

  • Go somewhere



    }




    Вот мой контроллер:
    using Microsoft.AspNetCore.Mvc;
    using kssgrafica.Data;
    using kssgrafica.Models;
    using kssgrafica.Models.ViewModels;
    using ImageMagick;
    using kssgrafica.Services;
    using kssgrafica.Services.ImageHandler;
    using kssgrafica.Services.ImageHandler.Dtos;
    using Microsoft.EntityFrameworkCore;
    using AutoMapper;
    using kssgrafica.Models.AuxiliaryModels;
    using kssgrafica.Extensions;

    namespace kssgrafica.Controllers
    {
    public class ProdutoController(ApplicationDbContext context, IImageHandler _imageHandler, IMapper mapper) : Controller
    {
    private readonly ApplicationDbContext _context = context;
    private readonly IMapper _mapper = mapper;
    private string DefaultPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/images");
    public IActionResult Index()
    {
    var produtos = _context.Produtos.Include(p => p.Categoria).Include(p => p.Imagens).ToList();
    var produtosViewModel = _mapper.Map(produtos);
    return View(produtosViewModel);
    }

    public async Task LoadTable(DtParameters dtParameters)
    {
    var searchBy = dtParameters.Search?.Value;

    // if we have an empty search then just order the results by Id ascending
    var orderCriteria = "Id";
    var orderAscendingDirection = true;

    if (dtParameters.Order != null)
    {
    // in this example we just default sort on the 1st column
    orderCriteria = dtParameters.Columns[dtParameters.Order[0].Column].Data;
    orderAscendingDirection = dtParameters.Order[0].Dir.ToString().ToLower() == "asc";
    }

    var produtos = await _context.Produtos.ToListAsync();
    var produtosViewModel = _mapper.Map(produtos);
    var result = produtosViewModel.AsQueryable();

    if (!string.IsNullOrEmpty(searchBy))
    {
    result = result.Where(r => r.Nome != null && r.Nome.ToUpper().Contains(searchBy.ToUpper()) ||
    r.Descricao != null && r.Descricao.ToUpper().Contains(searchBy.ToUpper()) ||
    r.Preco != null && r.Preco.ToString().ToUpper().Contains(searchBy.ToUpper()) ||
    r.Id != null && r.Id.ToString() == searchBy.ToUpper());
    }

    result = orderAscendingDirection ? result.OrderByDynamic(orderCriteria, DtOrderDir.Asc) : result.OrderByDynamic(orderCriteria, DtOrderDir.Desc);

    // now just get the count of items (without the skip and take) - eg how many could be returned with filtering
    var filteredResultsCount = result.Count();
    var totalResultsCount = await _context.Produtos.CountAsync();

    return Json(new DtResult
    {
    Draw = dtParameters.Draw,
    RecordsTotal = totalResultsCount,
    RecordsFiltered = filteredResultsCount,
    Data = result
    .Skip(dtParameters.Start)
    .Take(dtParameters.Length)
    .ToList()
    });
    }
    public IActionResult Create()
    {
    ViewBag.Categorias = _context.CategoriasProduto.ToList();
    return View();
    }
    [HttpPost]
    public async Task Create(ProdutoViewModel produtoViewModel, List imagens, IFormFile imagemPerfil)
    {

    produtoViewModel.DataCadastro = DateTime.UtcNow;

    var produto = _mapper.Map(produtoViewModel);
    _context.Add(produto);
    await _context.SaveChangesAsync();
    await SalvarImagens(imagens, imagemPerfil, produto);
    return RedirectToAction(nameof(Index));

    }
    [HttpGet]
    public async Task Edit(int id)
    {

    ViewBag.Categorias = await _context.CategoriasProduto.ToListAsync();
    var produto = await _context.Produtos.Where(p => p.Id == id).Include(p => p.Imagens).FirstOrDefaultAsync();
    var produtoViewModel = _mapper.Map(produto);

    return View(produtoViewModel);
    }
    [HttpPost]
    public async Task Edit(ProdutoViewModel produtoViewModel, int[] imgsDeletadas, List imagens, IFormFile imagemPerfil)
    {

    var produto = _mapper.Map(produtoViewModel);
    _context.Update(produto);
    await DeleteImages(imgsDeletadas);
    await SalvarImagens(imagens, imagemPerfil, produto);
    await _context.SaveChangesAsync();
    return RedirectToAction(nameof(Index));
    }

    [HttpPost]
    public async Task LoadCards(CardParameters cardParameters)
    {
    var produtos = await _context.Produtos.Include(p => p.Imagens).ToListAsync();
    var result = _mapper.Map(produtos);
    if (!string.IsNullOrEmpty(cardParameters.SearchValue))
    {
    result = result.Where(p => p.Id.ToString().ToUpper() == cardParameters.SearchValue.ToUpper() ||
    p.Nome != null && p.Nome.ToUpper().Contains(cardParameters.SearchValue.ToUpper()) ||
    p.Descricao != null && p.Descricao.ToUpper().Contains(cardParameters.SearchValue.ToUpper())).ToList();
    }

    var response = new CardResponse()
    {
    Result = result.Take(cardParameters.ResultsQtd).ToList(),
    LengthTotalRegisters = await _context.Produtos.CountAsync(),
    LengthFiltredResults = result.Count()

    };
    return PartialView("Cards",response);
    }

    private async Task SalvarImagens(List imagensGaleriaArquivo, IFormFile imagemPerfilArquivo, Produto produto)
    {
    foreach(var arquivo in imagensGaleriaArquivo)
    {
    var imagemGaleria = new Imagem()
    {
    Nome = "",
    NomeArquivo = Guid.NewGuid().ToString(),
    File = arquivo,
    Extensao = _imageHandler.GetExtension(arquivo),
    IdProduto = produto.Id,
    Path = DefaultPath,
    Perfil = false

    };
    var dtoGaleria = imagemGaleria.ToImageDto();
    if(await _imageHandler.SaveImageAsync(dtoGaleria))
    {
    try
    {
    _context.Add(imagemGaleria);
    } catch(Exception ex)
    {
    Console.WriteLine(ex.Message);
    _imageHandler.DeleteImage(dtoGaleria);

    }

    }
    }

    if(imagemPerfilArquivo != null)
    {
    var imagemPerfil = new Imagem()
    {
    Nome = "",
    NomeArquivo = Guid.NewGuid().ToString(),
    File = imagemPerfilArquivo,
    Extensao = _imageHandler.GetExtension(imagemPerfilArquivo),
    IdProduto = produto.Id,
    Path = DefaultPath,
    Perfil = true

    };
    var dtoPerfil = imagemPerfil.ToImageDto();
    try
    {
    if(await _imageHandler.SaveImageAsync(dtoPerfil))
    {
    _context.Add(imagemPerfil);
    }
    } catch(Exception ex)
    {
    Console.WriteLine(ex.Message);
    _imageHandler.DeleteImage(dtoPerfil);
    }

    }
    await _context.SaveChangesAsync();
    }

    private async Task DeleteImages(int[] imagesIds)
    {
    if(imagesIds.Length > 0)
    {
    var imagesIdsList = imagesIds.ToList();
    var images = await _context.Imagens.Where(img => imagesIdsList.Contains(img.Id)).ToListAsync();
    foreach(var img in images)
    {
    img.Path = DefaultPath;
    _imageHandler.DeleteImage(img.ToImageDto());
    _context.Remove(img);

    }
    await _context.SaveChangesAsync();

    }
    }

    }

    }

    В проблеме задействованы методы Edit, post and get и LoadCards.
    Я не знаю, почему Edit (метод get) является вызывается, когда я загружаю PartialView, но я помещаю if, который обрабатывает случай, когда идентификатор равен 0, возвращая Ok(), но я хочу знать, почему это происходит.
    Здесь моя попытка:
    public async Task Edit(int id)
    {
    if(id == 0)
    {
    return Ok();
    }
    ViewBag.Categorias = await _context.CategoriasProduto.ToListAsync();
    var produto = await _context.Produtos.Where(p => p.Id == id).Include(p => p.Imagens).FirstOrDefaultAsync();
    var produtoViewModel = _mapper.Map(produto);

    return View(produtoViewModel);
    }


    Подробнее здесь: https://stackoverflow.com/questions/783 ... dnt-call-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»