.Net MVC4 使用心得(五)细节问题Url.Action和Html.ActionLink
2015-03-11 16:17
344 查看
很久没时间研究了,今天再次摸起。感觉,mvc稍有不留神就会陷入一个有一个的坑。
说一个今天遇到而网上未找到相关资料的问题吧:在View或者Controller中使用Url.Action时(跟Html.ActionLink可以实现差不多功能),如果action设置的是不同于当前action的,不会有任何问题。如果设置的正是当前的action,会出现灰常疼的情况。你明明没有填写routeValues参数,可是如果之前你访问的页面routeValues不为空的话,这些routeValues会自动继承过来,引入到你的action里。
比如,如果使用Url.Action("Index"), 正常来讲应该路由到 /Home/Index。可是,如果我当前的位置为/Home/Index/1的话,你会惊奇的发现Url.Action("Index")的值为/Home/Index/1!!!
疼痛难忍,研究了一下,配置路由、新建规则,不行,因为id是默认加上去的,再怎么配他还是在。
直接传空的routeValues 用
[csharp] view
plaincopy
<span style="font-size:14px;">Url.Action("Index", new { })</span>
也不行,新建的空路由表,不会覆盖原先的路由。
看来只有手动删除id的路由了。
可行的方法是在controller里,针对这个,把对id的路由删掉写成这样:
[csharp] view
plaincopy
<span style="font-size:14px;">RouteValueDictionary rvd = RouteData.Values;
rvd.Remove("id");
ViewBag.allprourl = Url.Action("Index", rvd);</span>
然后到view里绑定:
[csharp] view
plaincopy
<span style="font-size:14px;"><a href="@ViewBag.allprourl"><img src="http://www.xxx.com/pro.jpg" /></a></span>
不过,真心不想这么麻烦。本来在view上直接写一下就好了,非要到controller里写一下(view上也可以写代码块,不过不推荐),然后通过viewbag去view绑定。费时费力费空间。
干脆在view上直接这样写
[csharp] view
plaincopy
<span style="font-size:14px;"><a href="@Url.Action("Index",new {id=""})"><img src="http://www.xxx.com/pro.jpg" /></a></span>
问题解决了,这次路由到了/Home/Index(因为是默认,所以其实路由到的是/)
说一个今天遇到而网上未找到相关资料的问题吧:在View或者Controller中使用Url.Action时(跟Html.ActionLink可以实现差不多功能),如果action设置的是不同于当前action的,不会有任何问题。如果设置的正是当前的action,会出现灰常疼的情况。你明明没有填写routeValues参数,可是如果之前你访问的页面routeValues不为空的话,这些routeValues会自动继承过来,引入到你的action里。
比如,如果使用Url.Action("Index"), 正常来讲应该路由到 /Home/Index。可是,如果我当前的位置为/Home/Index/1的话,你会惊奇的发现Url.Action("Index")的值为/Home/Index/1!!!
疼痛难忍,研究了一下,配置路由、新建规则,不行,因为id是默认加上去的,再怎么配他还是在。
直接传空的routeValues 用
[csharp] view
plaincopy
<span style="font-size:14px;">Url.Action("Index", new { })</span>
也不行,新建的空路由表,不会覆盖原先的路由。
看来只有手动删除id的路由了。
可行的方法是在controller里,针对这个,把对id的路由删掉写成这样:
[csharp] view
plaincopy
<span style="font-size:14px;">RouteValueDictionary rvd = RouteData.Values;
rvd.Remove("id");
ViewBag.allprourl = Url.Action("Index", rvd);</span>
然后到view里绑定:
[csharp] view
plaincopy
<span style="font-size:14px;"><a href="@ViewBag.allprourl"><img src="http://www.xxx.com/pro.jpg" /></a></span>
不过,真心不想这么麻烦。本来在view上直接写一下就好了,非要到controller里写一下(view上也可以写代码块,不过不推荐),然后通过viewbag去view绑定。费时费力费空间。
干脆在view上直接这样写
[csharp] view
plaincopy
<span style="font-size:14px;"><a href="@Url.Action("Index",new {id=""})"><img src="http://www.xxx.com/pro.jpg" /></a></span>
问题解决了,这次路由到了/Home/Index(因为是默认,所以其实路由到的是/)
相关文章推荐
- .Net MVC4 使用心得(五)细节问题Url.Action和Html.ActionLink
- Jquery: 使用html生成的link的一个小问题。
- php中iconv函数使用方法,URL传中文乱码问题,html页面跳转问题
- ASP.NET MVC 混搭 ASP.NET WebForms 所导致的 Html.ActionLink/BeginForm 问题
- HTML.ActionLink 和 Url.Action 的区别
- HTML.ActionLink 和 Url.Action 的区别
- html:link中的name,paramId,paramName和paramProperty四个属性的使用心得
- ASPX界面里的link标签中使用<%=myurl %>的问题求解
- html:link中的name,paramId,paramName和paramProperty四个属性的使用心得
- 说点关于Yii的 Yii::app()->createUrl 与 CHtml::normalizeUrl 使用的问题
- 使用HTML.ActionLink实现一个图片链接
- ASP.Net MVC探索之路 - 减少Html.RouteLink或Url.RouteUrl使用次数
- HTML.ActionLink 和 Url.Action 的区别
- html:link中的name,paramId,paramName和paramProperty四个属性的使用心得
- 使用MVC中的HtmlHelper对象的ActionLink方法,实现一个Javascript:void(0)效果,去调用一个JS方法
- Html.ActionLink Url.Action的用法
- html:link中的name,paramId,paramName和paramProperty四个属性的使用心得
- dhl:Url.Action和Html.ActionLink当有两个参数时:生成Html 代码中&字符的区别:Url.Action不会转义。
- Mvc Html.ActionLink 使用的一些小技巧
- HTML.ActionLink 和Html.Action和 Url.Action 的区别