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。
我正在使用 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。