Odniesienie się do akcji w kontrolerze poprzez $.ajax i Url.Action

0

Witam,

mam następujący schamat:

Kontrolery:

  • Kontorler1 - i on ma akcje: Akcja1

Oraz Widoki:

  • Widok1

teraz z poziomu widoku "Widok1" chcę się odność do akcji "Akcja1" w kontrolerze "Kontroler1".

robię to następująco:

 
$.ajax(
                    {
                        url: '../Akcja1',
                        type: "post"
                        });

W ten sposób przechodzę prawidłowo do akcji "Akcja1"

drugi sposób:

 
window.open("<%= Url.Action("../Akcja1")%>");

Tutaj już nie przechodzi w ogóle do akcji.

Próbowałem też:

 
window.open("<%= Url.Action("Akcja1", "Kontroler1")%>");

ale nic nie pomaga.

Co robię źle?

Zależy mi, żeby użyć "Url.Action", ponieważ chcę poprzez akcję w kontrolerze otworzyć nowy widok.

1

Przez Ajax robisz POST, a otwarcie okna to GET.
Jeśli Akcja1 jest oznaczona jako [HttpPost], to się nie wykona bez użycia żądania typu POST.

0

Akcja1 nie jest oznaczona w ogóle i nie chce się wykonać otwarcie okna GET.

Gdy oznaczyłem jako [AcceptVerbs(HttpVerbs.Get)] to nadal kontroler nie jest łapany. :/

0

Czy Akcja1 wymaga jakichś parametrów?

Taki kod działa u mnie bez problemów(View dla ActionTest domyślny):

Controller:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcTest.Controllers
{
    public class TestController : Controller
    {
        //
        // GET: /Test/

        public ActionResult Index()
        {
            return View("Index2");
        }


        public ActionResult ActionTest()
        {
            return View();
        }
    }
} 

Index2:

 
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<!DOCTYPE html>

<html>
<head runat="server">
    <meta name="viewport" content="width=device-width" />
    <title>Index2</title>
    <script src="/Scripts/jquery-1.8.2.js"></script>
</head>
<body>
    <div>
        <a id="link" href="#">Click</a>

        <script type="text/javascript">
            $(document).ready(function () {
                $("#link").click(function (event) {
                    event.preventDefault();
                    //tak nie działa
                    //window.open("<%= Url.Action("../Akcja1")%>");

                    //OK
                    window.open("<%= Url.Action("ActionTest")%>");
                    window.open("<%= Url.Action("ActionTest", "Test")%>");
                });
            });
        </script>
    </div>
</body>
</html>
0

właśnie tak robię u siebie ale u mnie nie działa.

jest jakiś inny sposób na odniesienie się do akcji w kontrolerze z otwarciem nowego okna?

0
<a id="link" href="/Controller/Action" target="_blank">Click</a>
0

dowiedziałem się, że korzystanie z <%= Url.Action("ActionTest", "Test")%> nie będzie działać, ponieważ działam na framwork m4, który jest oparty na asp.net mvc i ma niektóre swoje rozwiązania.

dodatkow zaznaczę, że do kontrolera muszę wysłać obiekt i na jego podstawie zwrócić nowy widok.

gdy robię link bezpośredni do kontrolera :

window.open(("/admin/contents/preview");

to wychwytuje mi akcje w kontrolerze.

natomiast gdy ustawię:

window.open("<%= Url.Action("/admin/contents/preview") %>");

to już mi to nie chce działać.

0

gdy wstawię w widok: <a href="<% = Url.Action("/admin/contents/preview") %>"> to jest test</a>
to powstaje mi <a href="" class="ui-link"> to jest test</a>

nie rozumiem, dlaczego nie generuje mi się wartość atrybutu "href"

1 użytkowników online, w tym zalogowanych: 0, gości: 1