Asp.Net MVC ajax调用 .net 类库问题
如果你还在为 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');
虽然两种方法都能够解决问题,但是我更倾向于第二种方法,因为可读性更强。
Asp.Net MVC ajax调用 .net 类库问题的更多相关文章
- ASP.NET MVC Ajax.ActionLink 简单用法
ASP.NET MVC 项目中,如何使用类似于 iframe 的效果呢?或者说 Ajax 局部刷新,比如下面操作: 我们想要的效果是,点击 About 链接,页面不刷新(地址栏不变),然后下面的内容进 ...
- asp.net WebService+Ajax调用
default.aspx 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile=&qu ...
- 爱上MVC~ajax调用分部视图session超时页面跳转问题
回到目录 这个问题出现了很多年了,都没有解决,问题是这样的,有一个需要授权才可以访问的分部视图,在一个view中使用ajax的方法去调用它,然后更新页面的局部DIV,这时,如果你长时间不操作,sess ...
- asp.net mvc 如何调用微信jssdk接口:分享到微信朋友(圈)| 分享到qq空间
如何在asp.net mvc 项目里, 调用微信jssdk接口,现实功能: 分享到微信朋友(圈)| 分享到qq空间 1 创建一个Action,准备一些数据,初始化数据(签名): /// <sum ...
- Asp.Net MVC Ajax
将ASP.NET MVC中的form提交改为ajax提交 在ASP.NET MVC视图中通过 @using (Html.BeginForm()) 产生的是form表单提交代码,可以用javascrip ...
- ASP.NET MVC Ajax 伪造请求
1.前言 CSRF(Cross-site request forgery)跨站请求伪造,ASP.NET MVC 应用通过使用AJAX请求来提升用户体验,浏览器开发者工具可以一览众山小,就很容易伪造了请 ...
- ASP.NET MVC ajax处理 AjaxResult
1.统一ASPNET MVC 对ajax请求响应格式定义,方便前端统一处理ajax结果. 1)定义程序返回结果数据格式 /// <summary> /// 执行结果 /// </su ...
- ASP.NET MVC AJAX 请求中加入 antiforgerytoken 解决“所需的防伪表单字段“__RequestVerificationToken”不存在”问题
在ASP.NET mvc中如果在表中使用了@Html.AntiForgeryToken(),ajax post不会请求成功 解决方法是在ajax中加入__RequestVerificationToke ...
- ASP.NET MVC AJAX的调用示例
@{ ViewBag.Title = "Home Page"; //下面引用Jquery和unobtrusive-ajax } @Scripts.Render("~/bu ...
随机推荐
- [转载]GDB十分钟教程
转自:http://blog.csdn.net/liigo/article/details/582231/ GDB十分钟教程 作者: liigo原文链接: http://blog.csdn.net/l ...
- Failed to create java virtue machine(不能创建java虚拟机)
今天开发模块时,遇到这个问题,本来是版本的问题,jdk1.6的版本有点低,与cxf框架不兼容,需要用到jdk1.7,结果安装了jdk1.7之后,客户方要求必须用jdk1.6,要统一,所以卸载jdk1. ...
- DHCP 服务器
简介: DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作,主要用途:给内部网络或网络服务供应商自动分配 I ...
- 关于Hibernate的总结
主键的生成策略: * increment :是由Hibernate完成的自动增长.(不是数据库底层的自动增长的方式.) * select max(id) from customer * ...
- systemverilog interface
普通的模块使用法:注意我们这里只实现了部分功能....不是完全的读写模块.... module mem_core( input logic wen, input logic ren, ...
- monkeyrunner工具同Monkey工具的差别
Monkey: Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流. monkeyrunner: monkeyrunner工具则是在工作站上通过API定义的特定 ...
- Atom编辑器入门到精通(六) Markdown支持
尽管我们使用Atom主要是为了编写代码,不过Atom还支持编辑很多其他格式的文件. 比如Markdown和Asciidoc. 这一章中我们主要学习如何快速方便地编辑Markdown文件.另外在写这篇博 ...
- XML前言
一.前言 1.XML全称"eXtensible Markup Language"(可扩展的标记语言) 2.DTD全称"Document Type Defintion&qu ...
- List的add方法与addAll方法的区别
add是将传入的参数作为当前List中的一个Item存储,即使你传入一个List也只会另当前的List增加1个元素addAll是传入一个List,将此List中的所有元素加入到当前List中,也就是当 ...
- mvn常见命令
http://www.cnblogs.com/adolfmc/archive/2012/07/31/2616908.html 创建一个简单的Java工程:mvn archetype:create -D ...