Asp.Net MVC WebGrid分页...是否可以将数据放入会话中?

时间:2011-04-20 20:00:01

标签: asp.net asp.net-mvc

我终于让我的MVC WebGrid分页工作了,我的下拉列表框criteira保持状态!!我通过将结果数据和标准数据放在会话中来实现这一点,当“下一页”点击网格时,所有内容都可以重新填充。是否有其他更合适的方法可以在不加载大量会话变量的情况下执行此操作?

这是我的控制器代码:

    [HttpPost]
    public ActionResult Results(TestCriteriaConsolidated form) 
    { 
        List<TestCriteriaResults> gridResults = new List<TestCriteriaResults>();
        gridResults.Add(new TestCriteriaResults { Value1 = "one", Value2 = "one", Value3 = "three", Value4 = "Four" });
        gridResults.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
        gridResults.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
        gridResults.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });
        gridResults.Add(new TestCriteriaResults { Value1 = "one", Value2 = "two", Value3 = "three", Value4 = "four" });

        Session["GridResults"] = gridResults;
        Session["SelectedYear"] = form.testCriteria.Year;
        form.testCriteriaResults = gridResults;             

        return View(form); 
    }

    [HttpGet]
    public ActionResult Results()
    {
        List<TestCriteriaResults> gridResults = ((List<TestCriteriaResults>) Session["GridResults"]);
        TestCriteria criteria = new TestCriteria() { Year = Session["SelectedYear"].ToString() };
        TestCriteriaConsolidated combined = new TestCriteriaConsolidated { testCriteriaResults = gridResults, testCriteria = criteria };

        return View(combined);
    }  

这是我的个人观点的代码:

@using (Html.BeginForm("Results", "Home"))
{
 <div style="float:left">
                <div style="font-weight:bold">                
                    @Html.LabelFor(m => m.testCriteria.Year)
                </div>
                <div style="width:110px; ">   
                     @Html.DropDownListFor(m => m.testCriteria.Year, new SelectList(new[] 
                     { 

                        new SelectListItem{ Text="All Years", Value=" " },
                        new SelectListItem{ Text="2010", Value="2010" },
                        new SelectListItem{ Text="2009", Value="2009" },
                        new SelectListItem{ Text="2008", Value="2008" },
                        new SelectListItem{ Text="2007", Value="2007" },
                        new SelectListItem{ Text="2006", Value="2006" }

                     }, "Value", "Text", "1"), new { @style = "width: 100px; margin-top: 5px" })          
                </div>
    </div>

    <div style="float:left">
        <div>                
            &nbsp;
        </div>
        <div style="width:100px; ">                                
                <input type="submit"  value="Results" />
        </div>
    </div>

}

这是我的查看代码,用结果显示网格:

@model MvcApplication1.Models.TestCriteriaConsolidated


       @{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}


@if (Model == null || Model.testCriteriaResults == null)
{

}
else
{


var grid = new WebGrid(Model.testCriteriaResults,canPage: true, rowsPerPage: 2);
@grid.Pager(WebGridPagerModes.Numeric);     


    <div id="grid">
        @grid.GetHtml()

    </div>
}

1 个答案:

答案 0 :(得分:0)

实际上,还有另一种选择。确保在查询字符串参数中获取所选年份,然后您不需要会话变量来保存数据。然后,寻呼机将调整查询字符串参数并将其自动附加到寻呼机链接。

这样做的一种方法是

public ActionResult Search(string year)
{
    return RedirectToAction("Index", "Results", new { searchString = year });
}

并确保您的结果方法接受字符串参数(或您想要的任何数据类型)。