2013-07-09 1 views
2

Я следующий код, у меня есть страница, которая выглядит следующим образом: snippet of the pageWebMatrix не WebGrid позволяет изменять rowsPerPage используя бритву

Я хочу, чтобы иметь возможность выбрать количество строк на странице, но я получаю ошибка, которая говорит: «CS1502: лучший перегруженный метод соответствует« System.Web.Helpers.WebGrid.WebGrid (System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, string, int, bool, bool, строка, строка, строка, строка, строка, строка, строка) «имеет некоторые недопустимые аргументы»

Сетка 1 фактически берет синтаксис бритвы @rpp, когда var rpp = data.Count() но когда я использую @rpp в Grid 2 и делаю var rpp = Request ["rpp1 '], он не принимает его, и он дает мне эту ошибку. Любой способ избежать этого?

@{ 
    if(Request["action"] == "Go") 
    { 
    var rpp = Request["rpp1"]; 

    <p>Showing @rpp rows per page.</p> 
    var columns2 = new[]{"ID", "SSO", "Category", "System", "Subject", "Created", "Assigned_To", "Case_Status"}; 
    var grid2 = new WebGrid(data, ajaxUpdateContainerId: "grid", defaultSort: "ID", columnNames: columns2, rowsPerPage: @rpp); 
    if (Request.QueryString[grid.SortDirectionFieldName].IsEmpty()) { 
    grid2.SortDirection = SortDirection.Descending; 
    } 
    @grid2.GetHtml( 
     tableStyle : "table", 
     alternatingRowStyle : "alternate", 
     headerStyle : "header", 
     mode: WebGridPagerModes. All, 
     previousText: "Previous", 
     nextText: "Next", 
     firstText: "First Page", 
     lastText: "Last Page", 
     columns: grid.Columns(
        grid.Column("ID", "ID"), 
        grid.Column("SSO", "SSO"), 
        grid.Column("Category", "Category"), 
        grid.Column("System", "System"), 
        grid.Column("Subject", "Subject"), 
        grid.Column("Created", "Created"), 
        grid.Column("Assigned_To", "Assigned To"), 
        grid.Column("Case_Status", "Status") 
    ) 
    ) 
    } else{ 

    if(Request["action"] == "Plain Table - Excel") 
    { 
    var rpp = data.Count(); 
    var columns1 = new[]{"ID", "SSO", "Category", "System", "Subject", "Created", "Assigned_To", "Case_Status"}; 
    var grid1 = new WebGrid(data, ajaxUpdateContainerId: "grid", defaultSort: "ID", columnNames: columns1, rowsPerPage: @rpp); 
    if (Request.QueryString[grid1.SortDirectionFieldName].IsEmpty()) { 
    grid1.SortDirection = SortDirection.Descending; 
    } 
    @grid1.GetHtml( 
     mode: WebGridPagerModes. All, 
     columns: grid.Columns(
        grid.Column("ID", "ID"), 
        grid.Column("SSO", "SSO"), 
        grid.Column("Category", "Category"), 
        grid.Column("System", "System"), 
        grid.Column("Subject", "Subject"), 
        grid.Column("Created", "Created"), 
        grid.Column("Assigned_To", "Assigned To"), 
        grid.Column("Case_Status", "Status") 
    ) 
    ) 
} else ............. 

Это форма:

<h4>Rows Per Page</h4> 
<form action="" method="get"> 
    <div class="right"> 
     <select id="rpp1" name="rpp1"> 
      <option selected="@(Request["rpp1"] == "15")" value="15">15</option> 
      <option selected="@(Request["rpp1"] == "25")" value="25">25</option> 
      <option selected="@(Request["rpp1"] == "50")" value="50">50</option> 
      <option selected="@(Request["rpp1"] == "75")" value="75">75</option> 
      <option selected="@(Request["rpp1"] == "100")" value="100">100</option> 
     </select> 
    </div> 
    <input type="submit" name="action" value="Go"/> 
    </form> 

ответ

1

Поскольку сообщение об ошибке говорит вам, что неправильный тип данных передается в качестве аргумента конструктора WebGrid. Элементы запроса - это строки, а не int. Вы можете использовать метод) AsInt (расширение, чтобы изменить его:

var rpp = Request["rpp1"].AsInt(); 

Кроме того, вам не нужно @ знак, когда внутри блока кода:

var grid2 = new WebGrid(data, ajaxUpdateContainerId: "grid", defaultSort: "ID", columnNames: columns2, rowsPerPage: rpp); 
+0

WOW! Благодаря! Я восхищаюсь всей вашей работой, мне это помогает! – Alexandra