asp. net ядро ​​mvc. наличие двух (индексного) метода с одинаковой ошибкой имени - PullRequest
0 голосов
/ 25 апреля 2020
    public IActionResult Index()
    {
        var result = _context.Properties.Where(x => x.isAvailable == true && x.isSpecialOffer == false ).ToList();

        foreach (var item in result)
        {
            var img = _context.Pictures.Where(x => x.PropertyId == item.PropertyId).FirstOrDefault();
            if (item.pictures == null) item.pictures = new List<Picture>();
            item.pictures.Add(img);

        }
       return View(result);
    }


    ////     search functionality
    [HttpGet]
    public async Task<IActionResult> Index(String PropertySearch)
    {

        ViewData["GetPropertyDetail"] = PropertySearch;
        var properyquery = from x in _context.Properties select x;
        if (!String.IsNullOrEmpty(PropertySearch))
        {
            properyquery = properyquery.Where(x => x.PropertyTitle.Contains(PropertySearch) || x.Ppurpose.Contains(PropertySearch) || x.PropertyType.Contains(PropertySearch));
        }
        return View(await properyquery.AsNoTracking().ToListAsync());
    }

Это представление, в котором я вызываю функцию

| Очистить поиск

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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Вы можете использовать [HttpPost] для вашего метода поиска.

[HttpPost]
public async Task<IActionResult> Index(String PropertySearch)
{

    ViewData["GetPropertyDetail"] = PropertySearch;
    var properyquery = from x in _context.Properties select x;
    if (!String.IsNullOrEmpty(PropertySearch))
    {
        properyquery = properyquery.Where(x => x.PropertyTitle.Contains(PropertySearch) || x.Ppurpose.Contains(PropertySearch) || x.PropertyType.Contains(PropertySearch));
    }
    return View(await properyquery.AsNoTracking().ToListAsync());
}
0 голосов
/ 25 апреля 2020

Вы можете сделать один метод таким образом:

public IActionResult Index(string? PropertySearch)
{
    if(PropertySearch == null)
    {
        var result = _context.Properties.Where(x => x.isAvailable == true && x.isSpecialOffer == false ).ToList();

        foreach (var item in result)
        {
            var img = _context.Pictures.Where(x => x.PropertyId == item.PropertyId).FirstOrDefault();
            if (item.pictures == null) item.pictures = new List<Picture>();
            item.pictures.Add(img);
        }

        return View(result);
    }
    else //search functionality here
    {
        ViewData["GetPropertyDetail"] = PropertySearch;
        var properyquery = from x in _context.Properties select x;
        if (!String.IsNullOrEmpty(PropertySearch))
        {
            properyquery = properyquery.Where(x => x.PropertyTitle.Contains(PropertySearch) || x.Ppurpose.Contains(PropertySearch) || x.PropertyType.Contains(PropertySearch));
        }
        return View(await properyquery.AsNoTracking().ToListAsync());
    }

}
...