2009-11-09 112 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);