2009-11-09 184 views
0

我对这个控制器代码 “/Controllers/Cubo/FilterController.cs”ASP.NET MVC jQuery的负载用户控件尊重命名空间

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"); 

但是当我在“FilterController”中调用“GetPeople”时,我需要调用目录名称“Cube”。 我该怎么做才能使用目录名称来获得更好的订单?

编辑: 我需要打电话为“$(this).load("/Cube/Filter/Get" + name + "", data, fn);”。提到“/Controllers/Cubo/FilterController.cs

+0

你的例子中的'目录名称'Cube''在哪里?你需要调用“没有”或“与”目录名称吗?毕竟,这里的目录名称是什么? – queen3 2009-11-09 19:18:16

+0

我需要调用“$(this).load(”/ Cube/Filter/Get“+ name +”“,data,fn);”。提到“/ Controllers/Cubo/FilterController。cs“ – 2009-11-09 20:25:50

回答

-1

我会通过增加新的途径向全球应用程序文件Global.asax中(Global.asax中解决这个服务器上。 vb或global.asax.cs,如果你正在使用代码分离)。

您将添加一个新的路线是这样的:

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

那么URL“/立方/过滤/ GetPeople”将被映射到FilterController的GetPeople作用。

您可以选择specifiy一个默认的控制器是这样的:

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

然后将链接“/立方/过滤/”映射到“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

+1

创建新路线来解决网址构建问题似乎不是一种解决这个问题的可持续性方式,尤其是在没有必要时,尤其是UrlHelper的目标。 – tvanfosson 2009-11-23 13:12:17

4

我建议使用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在一个单独的文件。在这种情况下,没有办法在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);