2015-07-10 50 views
1

我使用PagedList.Mvc爲我的數據創建Ajax分頁。不過,在部分視圖返回之後,我在添加到data-href屬性中的URL.Action時遇到問題。MVC 5 - URL.Action路徑綁定問題

當頁面第一次加載時,這個問題不會發生,只有在我使用分頁結果發出ajax請求後,url.action似乎沒有正確綁定。

這就是URL.Action應該鏈接到(注意,「路線」屬性)的操作:我的Html.Action加入到這個行動

[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); 
} 

在主視圖:

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

此操作也被ajax調用用於表分頁,因此也是page和pageSize參數。

內我呈現與該模型的數據的表這個局部視圖,加上像這樣,以每行的數據-href屬性:

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

這將使得該數據href屬性,像這樣:

enter image description here

但是,我做了一個成功的Ajax調用和部分的HTML被替換。該屬性值不以相同的方式解析。

它結束了是這樣的: enter image description here

任何想法,爲什麼發生這種情況?

我將雙擊屬性綁定到任何具有類.clickable-row的行,這就是使用此data-href屬性的行。因此,爲什麼我需要這個工作。

乾杯,

+1

您是否嘗試過將'Route'添加到您的'GetProjectRequests'部分視圖? –

+0

輝煌!似乎已經對它進行了排序@RosdiKasim我將路線的第一部分添加到局部視圖動作,現在意味着它的綁定正確。 –

+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。