mit jquery ASP.NET MVC - Aufruf von ajax-fähigen web-service

Dies ist ein bisschen eine Fortsetzung der Vorherige Frage.

Ich nun versuche einen Anruf zu tätigen, um eine AJAX-fähigen web-Dienst, den ich definiert, innerhalb der ASP.NET MVC-Anwendung (d.h. die MovieService.svc). Aber der service ist noch nie aufgerufen wird, in meinem getMovies javascript-Funktion.

Diese Technik des Aufrufs der AJAX-web service funktioniert, ok, wenn ich versuche, es in einem nicht ASP.NET MVC-Anwendung, so dass es macht mich Frage mich, ob vielleicht die ASP MVC Routen stören sind Dinge, die irgendwie, wenn es versucht, die AJAX-web-service-Aufruf.

Haben Sie eine Idee, warum meine web-service ist nicht immer genannt? - Code unten.

    <script src="<%= ResolveClientUrl("~/scripts/jquery-1.4.2.min.js") %>" type="text/javascript"></script>

    <script src="<%= ResolveClientUrl("~/scripts/grid.locale-en.js") %>" type="text/javascript"></script>

    <script src="<%= ResolveClientUrl("~/scripts/jquery-ui-1.8.1.custom.min.js") %>"
        type="text/javascript"></script>

    <script src="<%= ResolveClientUrl("~/scripts/jquery.jqGrid.min.js") %>" type="text/javascript"></script>

    <script type="text/javascript">
        var lastsel2;

        function successFunction(jsondata) {
            debugger
            var thegrid = jQuery("#editgrid");
            for (var i = 0; i < jsondata.d.length; i++) {
                thegrid.addRowData(i + 1, jsondata.d[i]);
            }
        }

        function getMovies() {
            debugger
            //***** the MovieService#GetMovies method never gets called
            $.ajax({
                url: 'MovieService.svc/GetMovies',
                data: "{}",  //For empty input data use "{}",
                dataType: "json",
                type: "GET",
                contentType: "application/json; charset=utf-8",
                success: successFunction
            });
        }

        jQuery(document).ready(function() {
            jQuery("#editgrid").jqGrid({
                datatype: getMovies,
                colNames: ['id', 'Movie Name', 'Directed By', 'Release Date', 'IMDB Rating', 'Plot', 'ImageURL'],
                colModel: [
                  { name: 'id', index: 'Id', width: 55, sortable: false, hidden: true, editable: false, editoptions: { readonly: true, size: 10} },
                  { name: 'Movie Name', index: 'Name', width: 250, editable: true, editoptions: { size: 10} },
                  { name: 'Directed By', index: 'Director', width: 250, align: 'right', editable: true, editoptions: { size: 10} },
                  { name: 'Release Date', index: 'ReleaseDate', width: 100, align: 'right', editable: true, editoptions: { size: 10} },
                  { name: 'IMDB Rating', index: 'IMDBUserRating', width: 100, align: 'right', editable: true, editoptions: { size: 10} },
                  { name: 'Plot', index: 'Plot', width: 150, hidden: false, editable: true, editoptions: { size: 30} },
                  { name: 'ImageURL', index: 'ImageURL', width: 55, hidden: true, editable: false, editoptions: { readonly: true, size: 10} }
                ],
                pager: jQuery('#pager'),
                rowNum: 5,
                rowList: [5, 10, 20],
                sortname: 'id',
                sortorder: "desc",
                height: '100%',
                width: '100%',
                viewrecords: true,
                imgpath: '/Content/jqGridCss/redmond/images',
                caption: 'Movies from 2008',
                editurl: '/Home/EditMovieData/',
                caption: 'Movie List'
            });

            $("#bedata").click(function() {
                var gr = jQuery("#editgrid").jqGrid('getGridParam', 'selrow');
                if (gr != null)
                    jQuery("#editgrid").jqGrid('editGridRow', gr, { height: 280, reloadAfterSubmit: false });
                else
                    alert("Hey dork, please select a row");
            });            

        });

    </script>

    <h2>
        <%= Html.Encode(ViewData["Message"]) %></h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">
            http://asp.net/mvc</a>.
    </p>
    <table id="editgrid">
    </table>
    <div id="pager" style="text-align: center;">
    </div>
    <input type="button" id="bedata" value="Edit Selected" />

Hier mein RegisterRoutes-code:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("*MovieService.svc*");

    routes.MapRoute(
        "Default",                                              //Route name
        "{controller}/{action}/{id}",                           //URL with parameters
        new { controller = "Home", action = "Index", id = "" }  //Parameter defaults
    );
}

Hier ist, was mein MovieService-Klasse sieht wie folgt aus:

namespace jQueryMVC
{
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class MovieService
    {
        //Add [WebGet] attribute to use HTTP GET
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json)]
        public IList<Movie> GetMovies()
        {
            return Persistence.GetMovies();
        }

    }
}
Können Sie Ihre Routen? Sie müssen wahrscheinlich eine IgnoreRoute für MovieService.svc
Ich habe bearbeitet Sie meine Reaktion, um zu zeigen, die Routen. Ich fügte hinzu, die IgnoreRoute für die MovieService, aber es nicht etwas ändern, wird die web-service ist noch nicht genannt.
Könnte Sie post ein Prototyp (Schnittstelle) der GetMovies Funktion innerhalb der MovieService.svc. Das problem in deinem code ist klar. Ich würde umschreiben, ein wenig den code und machen es einfach (und fixieren Sie Ihre wichtigsten problem der Ursache).
Interessant. Habe gerade versucht dies mit einem neuen Projekt testen und kann bestätigen das Verhalten. Scheint sich nicht um ein routing-Problem, da können Sie navigieren Sie zu der web-service-direkt. Ich werde mal ein wenig spielen, wenn ich mehr Zeit und sehen, ob ich dies herausfinden.
Ich hoffe mein code funktioniert in deiner Umgebung. Ich hatte keine Probleme mit routing, aber routes.IgnoreRoute("*MovieService.svc*") scheint mir eine gute Idee. Wenn etwas nicht mit MVC/WFC wir vergleichen können, mehr Teile von Ihr und meine Projekte. Noch eine Bemerkung: wie Sie sehen konnte, mein Englisch ist nicht gut, so es Sie finden einige deutliche Fehler, bitte Bearbeiten Sie meine Antwort, und beheben diese.

InformationsquelleAutor dcp | 2010-05-14

Schreibe einen Kommentar