2012-11-14 84 views
2

我已經將mvc3項目升級到mvc4項目,並且已將目標框架從.NET 4.0更改爲.NET 4.5(我不知道是否重要) 。WebGrid幫助器分頁不能用於.NET 4.5 MVC 4

現在,我到處都使用webgrid幫手,分頁完全破碎。 事實上,更新請求被髮送4次,並且id爲「displayClient」的元素被完全從html文檔中刪除。

這是我的源代碼的幾行:在的WebGrid

@{ 
    var grid = new WebGrid(canPage: true, canSort: true, ajaxUpdateCallback: "UpdateWebGridClient", ajaxUpdateContainerId: "displayClient", rowsPerPage: Model.RowPerPageClientId); 
    grid.Bind(Model.ClientList, rowCount: Model.ClientNumber, autoSortAndPage: false); 
    @grid.GetHtml(
     htmlAttributes: new { id = "grid", @class = "clientTable" }, 
     rowStyle: "odd", 
     alternatingRowStyle: "even", 
     footerStyle: "footerWebGrid", 
     mode: WebGridPagerModes.All, 
     numericLinksCount: 10, 
     columns: grid.Columns(
      grid.Column("Id", SUResources.Admin.ClientRef, style: "ref"), 
      grid.Column("FullName", SUResources.Admin.ClientFullName, style: "name"), 
      grid.Column("Town", SUResources.Admin.ClientTown, style: "town"), 
      grid.Column("Country", SUResources.Admin.ClientCountry, style: "country"), 
      grid.Column("Email", SUResources.Admin.ClientEmail, style: "email"), 
      grid.Column("PurchasedPicture", SUResources.Admin.ClientPurchasedPicture, style: "purchasedPicture"), 
      grid.Column("Ca", SUResources.Admin.ClientRevenue, style: "ca"), 
      grid.Column(
       style: "first-icon icons", 
       format: (item) => Ajax.ActionLink(
        " ", 
        "ClientInformation", 
        new { clientId = item.Id }, 
        new AjaxOptions 
        { 
         HttpMethod = "Get", 
         UpdateTargetId = "showClientInformation", 
         InsertionMode = InsertionMode.Replace 
        }, 
        new 
        { 
         @class = "record" 
        } 
       ) 
      ), 
      grid.Column(
       style: "icons", 
       format: 
       @<text> 
        @Html.ActionLink(" ", "Index", "SendMail", new { CustomerId = item.Id }, new { @class = "green-mail" }) 
       </text> 
      ), 
      grid.Column(
       style: "icons", 
       format: 
       @<text> 
        @if (item.StatusId == (short)Shootus.Domain.EnumTypes.CustomerState.Active) 
        { 
         <a onclick="ChangeCustomerStatus(this);" data-customer-id="@item.Id"> <img alt="" title="@SUResources.Admin.ClientEditionActiveUser" src="/Areas/Admin/Content/Images/Icons/ico-client-active-account.png"/></a> 
        } 
        else 
        { 
        string CustomerCurrentStatus = SUResources.Admin.ClientEditionBannedUser; 

        CustomerCurrentStatus = (item.StatusId == (short)Shootus.Domain.EnumTypes.CustomerState.NotValidated) ? SUResources.Admin.ClientEditionEmailNotValidatedUser : CustomerCurrentStatus; 
        CustomerCurrentStatus = (item.StatusId == (short)Shootus.Domain.EnumTypes.CustomerState.TurnedOff) ? SUResources.Admin.ClientEditionUnactiveUser : CustomerCurrentStatus; 
        <a onclick="ChangeCustomerStatus(this);" data-photographer-id="@item.Id"> <img alt="" title="@CustomerCurrentStatus" src="/Areas/Admin/Content/Images/Icons/ico-client-inactive-account.png"/></a> 
        } 
       </text> 
      ), 
      grid.Column(
       style: "icons", 
       format: @<text> 
        @Html.ActionLink(" ", "Delete", new { Id = item.Id }, new { @class = "delete" }) 
       </text> 
      ) 
     ) 
    ); 
} 
<div class="dot-line"> 
</div> 
<div class="pager client-line-pager"> 
    @grid.Pager() 
</div> 

默認尋呼機隱藏的CSS屬性顯示。

我在生成的HTML看到有像數據swhgajax,放在桌子上,對尋呼機生成的代碼數據swhgcallback一些新的屬性:數據swhgcontainer,數據swhglnk,...

我使用jQuery.ajaxPrefilter處理頁面中外部表單的一些額外數據。

有沒有人有同樣的問題,他解決了嗎?關於這個問題的起源的想法?

感謝您抽出時間來閱讀這篇文章,我希望有人能幫幫我:-(

+0

我已經找到了原因html元素正在閱讀的JavaScript代碼爲之後的WebGrid清除。這是因爲updateContainerId必須是服務器爲ajax請求返回的內容元素的內容標識。但是,有相同的更新請求的3/4,我仍然在尋找這種行爲的原因: - / –

回答

1

我處理過類似的問題。

以我爲例,我是令人耳目一新的內容的WebGrid在AJAX發佈後,每次瀏覽器網頁被刷新時,在點擊頁眉鏈接時會再發送一個獲取請求 我找不到原因。 :

$("thead tr a").click(function (e) { e.preventDefault(); $.get($(this).attr('href'), function (data) { $('#idGrid').html(data) }) }) 

也尋呼機:

$("tfoot tr a").click(function (e) { e.preventDefault(); $.get($(this).attr('href'), function (data) { $('#Grid').html(data) }) }) 

我收回ajaxUpdateContainerId的WebGrid參數。和修改我的控制器返回一個包含唯一的WebGrid的局部視圖是有一個Ajax調用:

if (Request.IsAjaxRequest(){} 

我不知道這是否是使用的人的...

0

我有同樣的問題在將我的項目升級之後,它將大量使用WebGrid,從MVC3升級到MVC4。我設法解決我的項目的問題,所以解決方案可能相同/類似

分頁/排序不工作 - 我已經添加了一個jQuery事件處理程序,顯示一個ajax微調網格,並不得不改變例如

$("#my-grid a").click(function() { blockGrid($("#my-grid-div")); }); 

$("#my-grid a").click(function() { blockGrid($("#my-grid-div")); return true; }); 

即處理點擊後返回true,這固定了分頁/排序

鏈接提交不止一次 - 默認情況下新的網格使其內部的所有鏈接都啓用ajax,這意味着如果您也使用確認對話框,它將獲得無論如何提交,然後如果您選擇確定再次提交。在我來說,我不得不改變

myGrid.Column(format: (item) => Html.ActionLink(Strings.Remove, "removemember", new { id = ViewBag.GroupId, uid = item.Id }, new { onclick = "return confirmDialog(this, 'Remove Member?', 'Remove Member?')", rel = "remove" })))) 

myGrid.Column(format: (item) => Html.ActionLink(Strings.Remove, "removemember", new { id = ViewBag.GroupId, uid = item.Id }, new { data_ajax = "false", onclick = "return confirmDialog(this, 'Remove Member?', 'Remove Member?')", rel = "remove" })))) 

即添加data_ajax = "false"