我在“/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");
}
}
}
使用jQuery调用javascript:
(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");
但是当我在“FilterController”中调用“GetPeople”时,我需要在没有目录名称“Cube”的情况下调用。 如何调用目录名称以获得更好的订单?。
修改
我需要打电话为“$(this).load("/Cube/Filter/Get" + name + "", data, fn);
”。提到“/Controllers/Cubo/FilterController.cs
”
答案 0 :(得分:4)
我建议您使用UrlHelper为您的加载操作构建您的网址。这应该使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保存在单独的文件中。在这种情况下,无法在javascript中使用UrlHelper,您需要修改函数以使用方法的全名来调用它,而不仅仅是合格的部分。
在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 );
答案 1 :(得分:-1)
我会在服务器上通过向全局应用程序文件global.asax添加新路由来解决这个问题(如果使用代码分离,则为global.asax.vb或global.asax.cs)。
你会添加这样的新路线:
routes.MapRoute("UserControlRoute", "/Cube/Filter/{action}",new { controller = "FilterController" } );
然后将url“/ Cube / Filter / GetPeople”映射到FilterController的GetPeople操作。
您可以选择指定默认控制器,如下所示:
routes.MapRoute("UserControlRoute", "/Cube/Filter/{action}",new { controller = "FilterController", action = "DefaultAction" } );
然后会将网址“/ Cube / Filter /”映射到“DefaultAction”操作。
如果您希望“Cube”更改为其他内容,则可以将其设置为参数:
routes.MapRoute("UserControlRoute", "/{cube}/Filter/{action}",new { controller = "FilterController", action = "DefaultAction", cube="DefaultCube" } );
在更改此文件中的路由后,您需要重新编译应用程序。 “UserControlRoute”是您要调用路线的任何名称,它们必须是唯一的。