ASP.NET MVC jQuery загружает UserControl, уважая пространство имен - PullRequest
0 голосов
/ 09 ноября 2009

У меня есть этот код для контроллера в "/Controllers/Cubo/FilterController.cs"

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

namespace Mkt.Web.Controllers.Cubo
{
    public class FilterController : Controller
    {
        //
        // GET: /Filter/

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

        public ActionResult GetPeople()
        {
            return View("~/Views/Shared/Cubo/Filter/People.ascx");
        }

        public ActionResult GetAddress()
        {
            return View("~/Views/Shared/Cubo/Filter/Address.ascx");
        }

    }
}

Позвоните в javascript с помощью jQuery:

(function($) {
    $.fn.loadFilter = function(name, data, fn) {
        data = (typeof (data) == "undefined") ? {} : data;
        fn = (typeof (fn) == "undefined") ? null : fn;
        $(this).empty();
        $(this).load("/Filter/Get" + name + "", data, fn);
    };
})(jQuery);

$("#containerFilter").loadFilter("People");

Но когда я вызываю «GetPeople» в «FilterController», мне нужно звонить без имени каталога «Cube». Как мне сделать звонок с именем каталога, чтобы получить лучший заказ?.

EDIT: Мне нужно было бы позвонить как "$(this).load("/Cube/Filter/Get" + name + "", data, fn);". Называется "/Controllers/Cubo/FilterController.cs"

Ответы [ 2 ]

4 голосов
/ 17 ноября 2009

Я предлагаю использовать UrlHelper для создания вашего URL для действия загрузки. Это должно сделать URL относительно текущего пути. Это предполагает, что ваш Javascript на ваш взгляд. Если нет, то я бы сконструировал URL в вашем представлении и передал бы полный URL этой функции.

(function($) {
    $.fn.loadFilter = function(name, data, fn) {
        data = (typeof (data) == "undefined") ? {} : data;
        fn = (typeof (fn) == "undefined") ? null : fn;
        $(this).empty();
        $(this).load( '<%= Url.Action("Get") %>' + name, data, fn);
    };
})(jQuery); 

Альтернатива - основана на хранении JavaScript в отдельном файле. В этом случае нет способа использовать UrlHelper в javascript, и вам нужно изменить свою функцию так, чтобы она вызывалась с полным именем метода, а не только с квалифицированной частью.

В файле JS:

(function($) {
    $.fn.loadFilter = function(url, data, fn) {
        data = (typeof (data) == "undefined") ? {} : data;
        fn = (typeof (fn) == "undefined") ? null : fn;
        $(this).empty();
        $(this).load( url, data, fn);
    };
})(jQuery);

В поле зрения:

$('#people').loadFilter( '<%= Url.Action( "GetPeople" ) %>', null, null );
0 голосов
/ 21 ноября 2009

Я бы решил эту проблему на сервере, добавив новый маршрут в глобальный файл приложения global.asax (global.asax.vb или global.asax.cs, если вы используете разделение кода).

Вы бы добавили новый маршрут, подобный этому:

routes.MapRoute("UserControlRoute", "/Cube/Filter/{action}",new { controller = "FilterController" } ); 

Тогда URL "/ Cube / Filter / GetPeople" будет сопоставлен с действием GetPeople фильтра FilterController.

При желании вы можете указать контроллер по умолчанию, например:

routes.MapRoute("UserControlRoute", "/Cube/Filter/{action}",new { controller = "FilterController", action = "DefaultAction" } ); 

Что затем сопоставит URL "/ Cube / Filter /" с действием "DefaultAction".

Если вы хотите, чтобы «Куб» изменился на что-то другое, то это также можно настроить в качестве параметра:

routes.MapRoute("UserControlRoute", "/{cube}/Filter/{action}",new { controller = "FilterController", action = "DefaultAction", cube="DefaultCube" } ); 

Вам необходимо перекомпилировать приложение после внесения изменений в маршруты в этом файле. «UserControlRoute» - это любое имя, которое вы хотите назвать маршрутом, оно должно быть уникальным.

Больше информации здесь; http://www.asp.net/learn/mvc/tutorial-23-cs.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...