MVC 5 - URL.Action 路由绑定问题

MVC 5 - URL.Action Route Bind Issue

我正在使用 PagedList.Mvc 为我的数据创建 Ajax 分页。但是,在部分视图 return 之后,我遇到了添加到 data-href 属性的 URL.Action 的问题。

第一次加载页面时不会出现此问题,只是在我使用分页结果发出 ajax 请求后 url.action 似乎无法正确绑定.

这是 URL.Action 应该 link 执行的操作(注意 'Route' 属性):

[Route("Project/{code}/Request/{number}")]
public ActionResult Details(string code, int number)
{
    if (number == 0 || code == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

    var viewModel = _requestLogic.GetIrDetailsViewModel(code, number);

    if (viewModel == null) return HttpNotFound();

    return View(viewModel);
}

在主视图中,我向此操作添加了一个 Html.Action:

[HttpGet]
public PartialViewResult GetProjectRequests(string code, int page = 1, int pageSize = 10)
{
    var viewModel = _requestLogic.GetRequestsForProject(code, page, pageSize);
    return PartialView("_ProjectRequestsList", viewModel);
}

此操作也被 ajax 调用用于 tables 分页,因此 page 和 pageSize 参数。

在这个部分视图中,我用模型数据渲染了一个 table,将 data-href 属性添加到每一行,如下所示:

@foreach (var item in Model)
{
    <tr class='clickable-row' data-href='@Url.Action("Details", new {number = item.RequestNo})'>
        <td>....
}

这将呈现 data-href 属性,如下所示:

然而,在我成功调用 ajax 之后,部分 html 被替换。此属性值不以相同的方式解析。

结果是这样的:

知道为什么会这样吗?

我将双击属性绑定到具有 class .clickable-row 的任何行,这就是使用此 data-href 属性的原因。因此,为什么我需要这个来工作。

干杯,

感谢@RosdiKasmin,我已经解决了这个问题。我在初始页面加载和通过 ajax 调用使用的部分视图操作中添加了一个路由属性。像这样:

    [HttpGet]
    [Route("Project/{code}/")] // <- I've added this.
    public PartialViewResult GetProjectRequests(string code, int page = 1, int pageSize = 10)
    {
        var viewModel = _requestLogic.GetRequestsForProject(code, page, pageSize);
        return PartialView("_ProjectRequestsList", viewModel);
    }

    // GET: Requests/Details/5
    [Route("Project/{code}/Request/{number}")]
    public ActionResult Details(string code, int number)
    {
        if (number == 0 || code == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

        var viewModel = _requestLogic.GetIrDetailsViewModel(code, number);

        if (viewModel == null) return HttpNotFound();

        return View(viewModel);
    }

这意味着 Url.Action 在创建操作 link 时使用现有的 URL。