Есть ли причина, по которой ajax, который работал в MVC 1, не работал в MVC3? - PullRequest
2 голосов
/ 10 марта 2011

Привет,

Недавно я обновил свой проект с ASP.NET MVC 1 .NET 3.5 VS2008 до ASP.NET MVC 3 .NET 4.0 VS2010.

Большинство из них прошло нормально, за исключениемЯ обнаружил, что определенная часть ajax, которую я запускаю, больше не работает.

Вот код:

    var filterEntities = function () {
        $.get({
            url: "../../ProjectEntities.mvc/OfType/<%= Model.Change.Job.Quote.Project.Id %>?entityType=" + $("#ChangesForm select[name=ProjectEntityType]").val(),
            success: function (data) {
                response = projectSupport.parseJson(response);

                var entitySelect = $("#ChangesForm select[name=ProjectEntity]");
                entitySelect.empty();

                hasValues = (response.length > 0);

                for (var i in response) {
                    entitySelect.appendListItem(response[i].id, response[i].title);
                }

                updateEditLink();
            }
        });
    }

Этот код продолжает вызывать

public ActionResult OfType(int id, int entityType)
    {
        var project = projectService.Find(id);
        return Json(projectEntityService.ProjectEntitiesOfType(applicationService.ForProject(project), (EntityType)entityType).Select(entity => new { title = entity.Title + " (" + entity.Application.Description + ")", id = entity.Id }));
    }

которые все работали хорошо раньше.У кого-нибудь есть идеи, что может быть причиной проблемы?У меня есть Ajax в других частях сайта, которые работают нормально, поэтому я не думаю, что потерял соответствующие файлы jquery или что-то еще.

Спасибо, Гарри

Ответы [ 2 ]

6 голосов
/ 10 марта 2011

Вам необходимо установить JsonRequestBehavior.AllowGet на вашем return Json()

var data = projectEntityService.ProjectEntitiesOfType(applicationService.ForProject(project), (EntityType)entityType).Select(entity => new { title = entity.Title + " (" + entity.Application.Description + ")", id = entity.Id });

return Json(data, JsonRequestBehavior.AllowGet);

Это было сделано, чтобы предотвратить Json Hijacking

2 голосов
/ 10 марта 2011

Необходимо разрешить запросы GET, которые по умолчанию отключены, для действия, возвращающего JSON, начиная с ASP.NET MVC 2:

return Json(
    projectEntityService.ProjectEntitiesOfType(applicationService.ForProject(project), (EntityType)entityType).Select(entity => new { title = entity.Title + " (" + entity.Application.Description + ")", id = entity.Id }), 
    JsonRequestBehavior.AllowGet
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...