使用Href属性将重定向到操作结果

10 浏览
0 Comments

使用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#。

0
0 Comments

问题出现的原因是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"问题的方法和原因的整理。

0