如果你還在為 ajax 調用 .net 類庫還束手無策的話,相信這篇部落格将幫助你解決這個世紀問題!
因為Visual Studio 内置了asp.net mvc ,不過當你添加asp.net mvc項目時,你會發現,controller,model和views放在同一個根目錄下,
就像這樣:
圖一:

是以當我把根目錄下的controlelr,model删除,另建兩個類庫,controller,model這樣更友善操作,
如圖二:
因為是學習asp.net mvc,是以這樣的方式是根據《ASP.NET 設計模式》的,有興趣的朋友可以買來看看,非常好的一本書!
圖三:
雖然我這樣做的,但是出現了一個問題,就是view頁面裡的js(ajax url如何擷取controller裡的方法?)
書中給出了這樣的解決方法:
using System.Web;
namespace MyMvc4Project.Infrastructure.Helpers
{
public class UrlHelper
{
public static string Resolve(string resource)
{
var url= string.Format("{0}://{1}{2}{3}",
HttpContext.Current.Request.Url.Scheme,
HttpContext.Current.Request.ServerVariables["HTTP_HOST"],
(HttpContext.Current.Request.ApplicationPath.Equals("/")) ?
string.Empty : HttpContext.Current.Request.ApplicationPath,
resource);
return url;
}
}
}
然後在ajax的url中這樣引用:<%= Html.Resolve("/Home/GetProductsByAjax")%>
雖然這樣的确可以解決問題,但是,我說了但是,這個js必須放在html(也就是js的内置形式,如果放在外鍊的js中"<%%>"将不起作用),但這不是我們想要的,
做過項目的朋友知道,一般我們都是把js外鍊的!
是以,這種方法解決不了問題,當我開始思考這個問題時,我也走了很多彎路,不過終于讓我解決了這個問題,有兩種方法:
方法一:
在html中加這樣的代碼:
<input id="hidd" type="hidden" value="<%= Html.Resolve("/Home/GetProductsByAjax")%>" />
這樣在外鍊的js中可以這樣調用:
$("#hidd").val() 給ajax的url;
方法二:
自己寫個js專門操作這樣方法,代碼如下:
var pathname = window.location.pathname;
var href = window.location.href;
var port = window.location.port;
var protocol = window.location.protocol;
var hash = window.location.hash;
var host = window.location.host;
function Resolve(url) {
return protocol + "//" + host + ((pathname == "/") ? "" : pathname) + url;
外鍊的js可以這樣調用:
myurl = Resolve('/Home/GetProductsByAjax');
雖然兩種方法都能夠解決問題,但是我更傾向于第二種方法,因為可讀性更強。