Wpis z mikrobloga

Siema Mirki,

Robię apkę w .NET Core Razer Pages, bardzo podobną do tej z tego tutoriala:

https://docs.microsoft.com/en-us/aspnet/core/data/

Mam dwa modele danych, nazwijmy je Header i Details. Na stronie głównej po kliknięciu w Header rozwijam wszystkie Details należące do niego. To działa spoko, ale chciałbym dodać przycisk, który dany detail "podniesie" o jedno oczko w górę albo w dół w kolejności. Robię to za pomocą Akcji (public ActionResult) w Headers (liczba mnoga po scaffoldowaniu) -> Index.cshtml -> Index.cshtml.cs. Teraz chciałbym dodać przycisk na stronie Index, który te metodę wywoła (metoda zmienia pole po którym sortowane są Details o +1 albo -1 w bazie i odświeża stronę). Wiem, że trzeba to zrobić za pomocą JS, tylko nie bardzo mi to działa :/

Mam coś takiego:

`
  • 5
@dunkey: Ustaw atrybut Route na akcji w kontrolerze i zobacz, czy pomaga.

Dodatkowo zobacz, czy Twoja ścieżka do kontrolera to nie przypadkiem "api/headers/...", bo ASP Core WebApi domyślnie tak ustawia.
@Maav: W jaki sposb moge ustawic ten atrybut? Jedyne co robi ta akcja, to pobiera Detail z danym ID, aktualizuje jeden jego atrybut i robi _context.SaveChangesAsync().

Gdzie moge sprawdzic sciezke? W Startup.cs jest
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Header}/{action=Index}/{id?}");
});

Wybacz idiotyczne pytania, dopiero sie ucze :)
@dunkey: Nie wiem, czemu domyślny nie działa, bo powinien. Ale nie jestem fanem domyślnych routingów.

Anyway, twoja akcja powinna wyglądać mniej więcej tak:
[HttpGet]
[Route("DetailMoveUp")]
public ActionResult DetailMoveUp()
{
...

A na nagłówku kontrolera powinieneś mieć mniej więcej:
[Route("[controller]")]
public class HeaderController : Controller
{
...

Piszę z pamięci, więc mogłem gdzieś się machnąć, ale wydaje mi się, że u mnie działa w ten sposób.
@dunkey Teoretycznie powinno działać bez ustawiania routa, sprawdź co dostajesz po ręcznym wejściu na ten link. Jeśli dalej 404, to możliwe że rezultat zwracasz jako view() ale nie masz widoku o nazwie takiej jak akcja. Przy zwracaniu jsona sprawdź czy masz dodane JsonRequestBehavior.AllowGet.