使用Href属性将重定向到操作结果
使用Href属性将重定向到操作结果
我试图从一个锚标签中调用动作结果,
我正在用C#构建HTML,它不在视图中,并使用html助手@Html.Raw(Model.HTML)
将其注入到视图中,像这样。
HTML是
html.AppendLine("");
问题是,当我第一次点击这个锚标签来删除记录时,它通过调用地址http://WebsiteAlias/Home/DeleteFile?ID=2
来工作。
但是之后,当我悬停在另一条记录上以删除它们时,它显示的URL是http://WebsiteAlias/Home/Home/DeleteFile?ID=2
它在URL中添加了另一个/Home,
为什么会发生这种情况?
我不能使用@Url.Action("Action","Controller")
,因为HTML来自C#。
问题出现的原因是C#代码构建HTML时,如果具有访问HttpContext的权限,则可以创建一个UrlHelper对象。解决方法是使用HttpContextBase对象获取当前的HttpContext,然后通过HttpContext获取UrlHelper对象。
具体的解决方法如下:
1. 如果C#代码可以访问HttpContext,可以使用以下代码创建UrlHelper对象:
using System.Web; var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext); string url = urlHelper.Action("DeleteFile", "Home", new { ID = dt.Rows[i]["ID"].ToString() }); return url;
2. 如果只能访问HttpContextBase对象,可以通过以下代码获取当前的HttpContext:
HttpContextBase contextBase; HttpContext httpContext = contextBase.ApplicationInstance.Context;
3. 如果在使用HttpContextBase对象时出现错误"HttpContextBase' does not contain a definition for 'Current' . Which reference need to add ?",需要添加以下引用:
using System.Web;
4. 在MVC Controllers、ViewModels、Views、Global.asax等地方应该可以访问HttpContext。如果无法直接访问HttpContext,可能需要将HttpContext传递给构建HTML的类。
以上是关于解决"Redirecting to Action Result Using Href Attribute"问题的方法和原因的整理。