我有一个MVC3 Razor视图,其中包含一个需要用户登录的链接,其html如下所示:
<a href="Home/Login?returnUrl=/myprojname/Product/Index">
然后在homecontroller和视图中登录一个动作方法。其中将值发布到登录操作方法。
在post action方法中我检查returnurl是否为null然后重定向到该URL。在本地系统上,它返回到此地址
http://localhost:1235/myProjname/Product/Index
并且工作正常。但是当我将它上传到服务器(IIS 7)时,它返回到
http://domainname/myProjname/Product/Index
并给出404,因为那里没有'myProjname',如果我删除'myprojname',它可以在实时服务器上使用此URL
http://domainname/Product/Index
但为此我需要像这样改变href
<a href="Home/Login?returnUrl=/Product/Index">
在这种情况下,它不适用于具有URL的本地系统
http://localhost:1235/Product/Index
请建议解决方案
答案 0 :(得分:2)
好的,我们会一起玩。
解决方案是正确创建链接,而不是硬编码。
@Html.ActionLink("Login", "Home", new { returnUrl = Url.Action("Index", "Product") })
在旁注中,您可能不需要将returnUrl
传递给操作。从动作方法本身的Request.UrlReferrer.AbsoluteUri
中拉回来。
没有意义听起来粗鲁,但我强烈建议您前往http://www.asp.net/mvc并进行阅读/观看,然后继续进行。
答案 1 :(得分:1)
使用Url.Action
和Url.Content
辅助方法将生成相对于应用程序根目录的URL,并避免这些问题。
此外,@Href("~/")
将生成应用程序根目录的完整路径(从视图中)。