MVC 5 - URL.Action Route Bind Issue

时间:2015-07-10 22:13:46

标签: ajax html5 model-view-controller asp.net-mvc-5 pagedlist

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

当页面第一次加载时,这个问题没有发生,只有在我使用分页结果发出一个ajax请求之后,url.action似乎没有正确绑定。

这是URL.Action应链接到的操作(注意'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);
}

在主视图中,我为此Action添加了一个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);
}

这个Action也用于表分页的ajax调用,因此是page和pageSize参数。

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

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

这将渲染data-href属性,如下所示:

enter image description here

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

它最终会像这样: enter image description here

知道为什么会这样吗?

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

干杯,

1 个答案:

答案 0 :(得分:2)

感谢@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在创建操作链接时会使用现有的URL。