asp.net-mvc-3 – Asp.net Mvc3 webgrid和分页

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-3 – Asp.net Mvc3 webgrid和分页前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试学习 Asp.net mvc.我知道它与形式的不同,我需要改变我的思维方式.我的问题是关于webgrid.当我将webgrid添加到我的页面并点击搜索按钮与Post发送它渲染表与寻呼机等等.但是寻呼机上的链接不是发布形式,而是链接,我丢失了所有表单的数据.

控制器有两个索引方法,一个是get和另一个用于post.为了让我什么也不做,我只需要创建一个新的viewmodel,在这种情况下,Search类并设置它来查看.对于我的帖子方法,我抓住我的视图模型做搜索并设置填充的viewmodel来查看.

问题:webgrid将寻呼机渲染为链接,因此它将进入索引获取,但由于它不是发布请求,我没有填写任何表单字段,我的搜索将不提供相同的结果集.

可能示例代码可以更好地解释它.

视图:

<form action="" method="post">

Esas no : @Html.TextBoxFor(x=>x.Name)
Yil : @Html.TextBoxFor(x=>x.Year)

<input type="submit" value="Search" />

<hr />
@ViewBag.Message
<hr />

@{ var grid = new WebGrid(Model.Results,rowsPerPage:5);}

@grid.GetHtml(tableStyle:"table",htmlAttributes:new {id="tbl"} )

</form>

这是我的控制器:搜索发生在索引Post方法,它只有我的viewmodel类.

private ISearchContext _sc;

    public  MyController(ISearchContext sc)
    {
        _dc = dc;
    }

    //
    // GET: /Dava/

    public ActionResult Index()
    {
        var search = new Search();
        ViewBag.Message = "";
        return View(search);
    }

    [HttpPost]
    public ActionResult Index(Search search)
    {

        Search sres = _dc.SearchFromRepository(search);
        ViewBag.Message = String.Format("Count:{0} ",sres.Results.Count);
        return View(sres);
    }

搜索模型类如下:

public class Search
{
    public int Year { get; set; }
    public string Name { get; set; }


    public IList<Item> Results { get; set; }

    public Search()
    {
        Results = new List<Item>();
    }
}

解决方法

解决此问题的一种方法是使用javascript并订阅任何寻呼机链接的点击事件,然后获取所需页面的值,将其注入到表单上的隐藏字段中,并将表单提交到服务器,以便另外两个值也被发送.

因此,首先在搜索视图模型上添加一个页面可空整数属性,并将相应的隐藏字段添加到将包含所选页码的表单中:

@Html.HiddenFor(x => x.Page,new { id = "page" })

那么所有你需要的是一个小的JavaScript片段到页面订阅寻呼机链接的.click事件:

$(function () {
    $('tfoot a').click(function () {
        // when the user clicks on any of the pager links
        // try to extract the page number from the link and
        // set the value of the hidden field
        var page = this.href.match(/page=([0-9])+/)[1];
        $('#page').val(page);

        // submit the form so that the POST action is invoked
        // passing along the search criteria (Name and Year) along
        // with the page hidden field value to the Index action
        $('form').submit();

        // cancel the default action of the link which is to simply redirect
        // to the Index action using a GET verb.
        return false;
    });
});
原文链接:https://www.f2er.com/aspnet/246181.html

猜你在找的asp.Net相关文章