Laden...

MVC Action Problem

Erstellt von itstata vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.116 Views
I
itstata Themenstarter:in
302 Beiträge seit 2008
vor 14 Jahren
MVC Action Problem

Hallo,
ich bin gerade am rumbasteln mit MVC, dabei komme ich leider gerade nicht weiter.
Wenn ich einen ActionLink in einer Sicht per Helper erstelle klappt das Routing wunderbar:


 <%= Html.ActionLink("Home", "Index", "Home")%>

das ganze möchte ich aber nun so machen, dass bei einem button-klick der link aktiviert wird. Meine erste Frage:
Macht man das per JS-Event?
zweite Frage:
Warum geht das wiefolgt nicht (beim klicken passiert einfach nichts)?


protected void Button1_Click(object sender, EventArgs e)
    {
      Url.Action("Index", "Home");
    }

 <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />

würde mich freuen, wenn mir jemand helfen kann.

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo itstata

Was willst du bei deiner ersten Frage machen?
Den Button von unsichtbar auf sichtbar schalten?

Zur zweiten Frage: In ASP.NET MVC benutzt du keine Controls und Eventhandler im eigentlichen Stil mehr.
Eingabecontrols gehen gar nicht, andere wie bspw. das Repeater Control geht zwar, sollte aber auch nicht verwendet werden.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

I
itstata Themenstarter:in
302 Beiträge seit 2008
vor 14 Jahren

hi peter,
erstmal danke für deine antwort, das keine events mehr angedacht sind ist ein interessanter ansatz. ich werd da dran bleiben und mich schlau machen.

ich möchte eigentlich nur in meiner seite navigieren. z.b. von about zu home. und anstatt einen hyperlink drücken zu müssen sollte dort ein button existieren. dort soll man einfach raufklicken und die home-seite soll erscheinen.
d.h. über events würde ich das ja dann nicht mehr tun... wie denn dann? kann ich auf ein button direkt einen hyperlink setzen (ohne ein form)?

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo itstata

Für GET-Links solltest du normale Anchor-Tags verwenden, also <a href... bzw. eben ActionLink das einen Anchor erzeugt.

Buttons nimmst du für Formulare und dort verwendest du meistens POST.
Per CSS kannst du dein Anchor-Tag auch so formatieren, das er wie ein Button aussieht.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

I
itstata Themenstarter:in
302 Beiträge seit 2008
vor 14 Jahren

super,
ich habs jetzt mit einem css-button gemacht. vielen dank.


 <a href="/Link" class="button"><span>Buttonname</span></a>
I
itstata Themenstarter:in
302 Beiträge seit 2008
vor 14 Jahren

jetzt hab ich doch nochmal eine Frage. wenn ich z.B. zwei DropDownLists in eine View packe und diese werden über den Controller mit Daten gefüllt, würde ich die eine DDL von der anderen abhängig machen?
Bei den Web-Forms kann man ja die daten binden...?

gibts es in diese richtung irgendwelche tutorials? ich konnte bisher nichts cleveres finden.

5.941 Beiträge seit 2005
vor 14 Jahren

Hallo ifstata

Da hängt von deiner Logik ab 😉
Und ob du das client- serverseitig machen möchtest.

Schau mal hier:

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

I
itstata Themenstarter:in
302 Beiträge seit 2008
vor 14 Jahren

so langsam bin ich von der mvc-architektur echt begeistert...
ich hab jetzt einfach mal einen versuch mit jquery gewagt.

ich habe eine DropDownListe von Kursen (
Physics
Composition
Poetry
Literature...).

Controller:


SchoolEntities entities = new SchoolEntities();

        public ActionResult Index()
        {
            var courses = new SelectList(entities.Course.ToList(), "CourseID", "Title");
            ViewData["Courses"] = courses;

            return View();
        }

Und die Sicht:


 <label for="Courses">
        Courses:</label><%= Html.DropDownList("Courses") %>

wenn ich nun einen eintrag auswähle wird eine Aktion im Controller ausgeführt wo die Kurs-ID übergeben wird)

Das wird per JS/ JQuery getan ( _$.getJSON("/Home/GetDepartment", { courseID:value } _):


 <script src="../../Scripts/jquery-1.3.2.js" type="text/javascript"></script>

    <script type="text/javascript">
        $(document).ready(function() {
            $("#Courses").change(function() {
                getData($("#Courses").val());
            });
        });

        function getData(value) {
            $.getJSON("/Home/GetDepartment",
          { courseID: value }, // übergabewert
          function(data) {
              alert(data); //tu was mit den ergebnis
          });
        }
    </script>

Die Aktion im Controller sieht folgendermaßen aus.


public JsonResult GetDepartment(int courseID)
        {
            String departmentName = (from c in entities.Course
                                     where c.CourseID == courseID
                                     select c.Department.Name).FirstOrDefault();

            return Json(departmentName); // Hier wird der Name der Abteilung zurückgegeben
        }

Auf Seiten der View wird jetzt das Ergebnis (einfacher String) per Alert ausgegeben. Man könnte natürlich auch eine Liste übergeben oder das Ergebnis in eine zweite DDL einfügen.

Gibt es an diesem Vorgehen kritik oder ist das unelegant?