Laden...

ASP.net Webanwendung MVC Ajax-Request an Controller aus extra js.-Datei

Erstellt von Fab4guy vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.265 Views
F
Fab4guy Themenstarter:in
54 Beiträge seit 2016
vor 6 Jahren
ASP.net Webanwendung MVC Ajax-Request an Controller aus extra js.-Datei

Hallo zusammen,

ich würde gerne in meiner Webanwendung mit Ajax-Request arbeiten.
Der Aufbau der Anwendung ist der aus Bild1 und denke ich allgemein bekannt.

Füge ich den Code für den Ajax-Request direkt in der View ein als Script-Teil funktioniert das ganze auch.

Die Methode, welche sich in der extra js-Datei befindet wird über einen Change-Event von diesem Select-Feld aufgerufen.

<div class="formRow">
            <p>
                <label>
                    Land*:<br />
                    <select name="country" id="country" data-url="@Url.Action("FirstAjax","Ajax")">
                        <option value="-1" selected>Bitte wählen</option>
                        <option value="Deutschland">Deutschland</option>
                    </select>
                </label>
            </p>
        </div>

Aktuell zum Testen irgendwelche Testdaten fest verankert.

var frmData = new FormData();
        frmData.append('modul', 'googleMaps');
        frmData.append('street', $('#street').val());
        frmData.append('houseNumber', $('#houseNumber').val());
        frmData.append('zipCode', $('#zipCode').val());
        frmData.append('city', $('#city').val());

        var url = $(this).attr('data-url');

        $.ajax(
            {
                url: url,
                type: 'POST',
                cache: false,
                data: {
                    Address1: "423 Judy Road",
                    Address2: "1001",
                    City: "New York",
                    State: "NY",
                    ZipCode: "10301",
                    Country: "USA"
                },
                contentType: 'application/json; charset=utf-8',
                success: function (data) {
                    var dataArray = $.parseJSON(data);
                    console.log(dataArray);
                },
                error: function () {
                    alert("Error");
                }
            }
        );

und das ist jetzt der Controller dazu

namespace landscape.Controllers
{
    public class AjaxController : Controller
    {
        // GET: Ajax
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult FirstAjax(Company company)
        {
            return Json(new { success = true });
        }
    }
}

Bild2 zeigt die Fehlermeldung, dass die Datei/Controller nicht gefunden wird.

Die "externen" JS-Dateien werden per Bundle eingespielt.

 @Scripts.Render("~/Scripts/ownJs")

Müsste doch eigentlich genauso funktionieren, als wie wenn ich den Javascript Inline definiere.

D
985 Beiträge seit 2014
vor 6 Jahren

Der Browser setzt einen GET Request auf der Url ab, aber dafür gibt es keine passende Methode in deinem Controller.

F
Fab4guy Themenstarter:in
54 Beiträge seit 2016
vor 6 Jahren

Mh okay. Aber es reicht nicht aus der vorhanden Methode [HttpGet] daraus zu machen.