Razor sharp html链接与执行链接不同

时间:2013-12-26 14:31:43

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

在创建自定义寻呼机的过程中,当我将一个字符串发送到我的视图并将其编码为@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和重现的链接是如何不同的。

提前致谢

1 个答案:

答案 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();