我正在使用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属性,如下所示:
然而,在我成功进行ajax调用并替换部分的html之后。此属性值不会以相同方式解析。
它最终会像这样:
知道为什么会这样吗?
我将双击属性绑定到具有类.clickable-row的任何行,这是使用此data-href属性的内容。因此,为什么我需要这个工作。
干杯,
答案 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。