2. 这是最常见的一种转向方法;
HyperLink控件
1. Asp.net 服务器端控件 属性NavigateUrl指定要跳转到的Url地址
2. NavigateUrl是可以在服务器端使用代码修改,这个区别于<a
3. 由于HyperLink本身没有事件所以要在服务器端其它事件中设置NavigateUrl
4. 代码示例
<Asp:HyperLink id=”hyperlink” runat=”server” NavigatoeUrl=”test.aspx”ok</Asp:HyperLink
Response.Redirect()方法
1. 过程:发送一个Http响应到客户端,通知客户端跳转到一个新的页面,然后客户端再发送跳转请求到服务器端。
2. 页面跳转之后内部控件保存的所有信息丢失,当A跳转到B,B页面将不能访问A页面提交的数据信息。
3. 使用这个方法使用这个方法跳转后浏览器地址栏的Url信息改变
4. 可以使用Session Cookies Application等对象进行页面间的数据传递
5. 重定向操作发生在客户端,总共涉及到两次与Web服务器的通信:一次是对原始页面的请求,另一次是重定向新页面的请求
Server.Transfer()方法
1. 实现页面跳转的同时将页面的控制权进行移交
2. 页面跳转过程中Request Session等保存的信息不变,跳转之后可以使用上一个页面提交的数据
3. 跳转之后浏览器地址栏的Url不变
4. 这种方法的重定向请求是在服务器端的进行的,浏览器不知道页面已经发生了一次跳转
Server.Execute()方法
1. 该方法允许当前页面执行同一个Web服务器上的另一个页面
2. 页面执行完毕之后重新回到原始页面发出Server.Execute()的位置。
3. 这种方式类似针对页面的一次函数调用 被请求的页面可以使用原始页面的表单数据和查询字符串集合
4. 被调用页面的Page指令的EnableViewStateMac属性设置为FalseJavaScriptstring str = "<script language=javascripthistory.go(-2);</script";
Response.Write(str);相关:
1. 为了确保HTML输出的合法性 最好使用Response.Redirect方法;因为Server.Execute 或者Server.Transfer方法返回给客户端的页面包含多个<Html<body标记,不是合法的HTML页面,在非IE浏览器中可能会发生错误。
需求:spring MVC框架controller间跳转,需重定向。
有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示。本来以为挺简单的一件事情,并且个人认为比较常用的一种方式,一百度全都有了,这些根本不是问题,但是一百度居然出乎我的意料,一堆都不是我想要的结果。
无奈啊,自己写一篇比较全都供以后大家一百度吧,哈哈哈。
是这些写的不是很全都人们给了我写这篇博客的动力。
2. 解决办法 需求有了肯定是解决办法了,一一解决,说明下spring的跳转方式很多很多,我这里只是说一些自我认为好用的,常用的,spring分装的一些类和方法。 (1)我在后台一个controller跳转到另一个controller,为什么有这种需求呢,是这样的。
我有一个列表页面,然后我会进行新增操作,新增在后台完成之后我要跳转到列表页面,不需要传递参数,列表页面默认查询所有的。 方式一:使用ModelAndView return new ModelAndView("redirect:/toList"); 这样可以重定向到toList这个方法 方式二:返回String return "redirect:/ toList "; 其它方式:其它方式还有很多,这里不再做介绍了,比如说response等等。
这是不带参数的重定向。 (2)第二种情况,列表页面有查询条件,跳转后我的查询条件不能丢掉,这样就需要带参数的了,带参数可以拼接url 方式一:自己手动拼接url new ModelAndView("redirect:/toList?param1="+value1+"¶m2="+value2); 这样有个弊端,就是传中文可能会有乱码问题。
方式二:用RedirectAttributes,这个是发现的一个比较好用的一个类 这里用它的addAttribute方法,这个实际上重定向过去以后你看url,是它自动给你拼了你的url。 使用方法: attr.addAttribute("param", value); return "redirect:/namespace/toController"; 这样在toController这个方法中就可以通过获得参数的方式获得这个参数,再传递到页面。
过去的url还是和方式一一样的。 (3)带参数不拼接url页面也能拿到值(重点是这个) 一般我估计重定向到都想用这种方式: @RequestMapping("/save") public String save(@ModelAttribute("form") Bean form,RedirectAttributes attr) throws Exception { String code = service.save(form); if(code.equals("000")){ attr.addFlashAttribute("name", form.getName()); attr.addFlashAttribute("success", "添加成功!"); return "redirect:/index"; }else{ attr.addAttribute("projectName", form.getProjectName()); attr.addAttribute("enviroment", form.getEnviroment()); attr.addFlashAttribute("msg", "添加出错!错误码为:"+rsp.getCode().getCode()+",错误为:"+rsp.getCode().getName()); return "redirect:/maintenance/toAddConfigCenter"; } }@RequestMapping("/index") public String save(@ModelAttribute("form") Bean form,RedirectAttributes attr) throws Exception { return "redirect:/main/list"; }页面取值不用我说了吧,直接用el表达式就能获得到,这里的原理是放到session中,session在跳到页面后马上移除对象。
所以你刷新一下后这个值就会丢掉。3. 总结 最底层还是两种跳转,只是spring又进行了封装而已,所以说跳转的方式其实有很多很多种,你自己也可以封一个,也可以用最原始的response来,也没有问题。
好了,就到这儿。
1.<a href="Default.aspx"跳转</a
2.<asp:HyperLink id="HyperLink1" runat="server" NavigateUrl="Default.aspx"跳转</asp:HyperLink
3.Response.Redirect(url) //第一种跳转方法
4.Server.Transfer(url) //第二种跳转方法
5.Sever.Execute(url) //第二种跳转方法
二、使用说明
1-2.这里说一下HyperLink的功能和<a href="#"</a一样的。如果想要提交到服务器端跳转需要使用LinkButton控件,可以实现多种链接效果,并且与button、imagebutton的功能是一样滴~。
3.Response.Redirect():首先发送一个HTTP响应到客户端,通知客户端跳转到一个新的页面,然后客户端再发送跳转请求道服务器端。在页面跳转后内部控件保存的所有数据信息将丢失,因此当页面A跳转到页面B,页面B将无法访问页面A中提交的数据信息,跳转页面后浏览器地址栏的URL信息转变。
4.Server.Transfer():在实现页面跳转的同时将页面处理的控制权进行移交。页面A跳转到页面B后可以继续使用页面A中提交的数据信息。此方法由页面A跳转到页面B后,浏览器的地址仍保持页面A的URL信息。
5.Server.Execute():允许当前页面执行同一Web服务器上的另一页面,当另一页面执行完毕后,控制流程重新返回到原页面发出Server.Execute的调用位置。
希望它的默认页是index.html页,在vs2010中给站点根目录增加了index.html,然后调用没有什么问题,但部署到IIS7上,在功能试图=》默认文档添加了index.html,但是只输入域名还是访问不到,看来还是.net mvc和IIS不兼容的原因,后来同事采用的办法是在global文件中把默认页面写成一个需要登录的页面,这样因为没有权限,系统会自动跳转到登录页面
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "IndexPage", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
}
朋友找到了一个很好的博文,感觉实现方法更加灵活,具体如下:
方法1:
在Global.asax文件中增加
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Context.Request.FilePath == "/") Context.RewritePath("index.html");
}
方法2:
新建一个路由DefaultController,并把它设置为默认路由,在Action中增加
Redirect(Url.Content("~/index.html"));
此方法需要修改web.config配置
在Web.config文件中的节点中增加:
方法3:
1)站点根目录增加了default.html;
2)修改Global.asax默认的路由注册,去掉默认controller:
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new {action = "Index", id = UrlParameter.Optional } // 参数默认值
);
将iis中的默认文档配置为index.html
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:3.701秒