在创建自定义寻呼机的过程中,当我将一个字符串发送到我的视图并将其编码为@raw(strHTML)时,我遇到了问题,它会自动在我的所有链接前面添加一个控制器名称。在初始加载时,正确加载了寻呼机,并且没有添加额外的控制器名称。当我点击下一个按钮时,会对该操作执行get请求,并且必须加载下一页,这也将创建一个新的寻呼机。输出的html与第一次执行时完全相同。调试时我的customPager创建的html:
<ul>
<li class='previousPage'><span>Previous</span></li>
<li class='currentPage'><span>1</span></li>
<li><a title='Next page' rel='next nofollow' href='Invoices/Index?page=2'>2 </a></li>
<li><a title='Next page' rel='next nofollow' href='Invoices/Index?page=3'>3 </a></li>
<li><a title='Next page' rel='next nofollow' href='Invoices/Index?page=4'>4 </a></li>
<li><a title='Next page' rel='next nofollow' href='Invoices/Index?page=5'>5 </a></li>
<li class='nextPage'><a title='Volgende pagina' rel='next nofollow' href='Invoices/Index?page=2'>Volgende</a></li>
</ul>
html是正确的,但是当页面呈现并且我将鼠标悬停在链接上时,它会再现以下链接:
localhost:xxxx/company/Invoices/Invoices/Index?page=1
公司是区域,发票控制器,第二个发票(不必要,这打破了链接),索引行动名称。
我想知道在浏览器中点击时html和重现的链接是如何不同的。
提前致谢
答案 0 :(得分:3)
不要硬编码href属性值,而是使用Url.Action
辅助方法。它会解决你的问题。
替换
href='Invoices/Index?page=2'
<强>与强>
href='@Url.Action("Index","Invoices",new { page=2 })'
编辑:(根据评论):
如果您想在自定义类中使用Url.Action方法
将RequestContext
从控制器传递到您的自定义类。我会在你的自定义类中添加一个Constructor来处理这个问题。
using System.Web.Mvc;
public class PaginationCustom
{
private UrlHelper _urlHelper;
public PaginationCustom(UrlHelper urlHelper)
{
_urlHelper = urlHelper;
}
public string GetPagingMarkup()
{
//add your relevant html markup here
string html = "<div>";
string url = _urlHelper.Action("Index", "Invoices", new { id = 3 });
html= html+"<a href='"+url + "'>3</a></div>";
return html;
}
}
您需要将System.Web.Mvc
命名空间导入此类以使用UrlHelper
类。
现在在您的控制器中,创建此类的对象并传递控制器上下文
UrlHelper uHelp = new UrlHelper(this.ControllerContext.RequestContext);
var paging = new PaginationCustom(uHelp );
//Now call the method to get the Paging markup.
string pagingMarkup = paging.GetPagingMarkup();