AJAX过滤webgrid

时间:2016-07-14 11:28:47

标签: javascript jquery asp.net ajax asp.net-mvc

我在使用我的webgrid上的JS进行排序时遇到了问题。因此,想法是用户将字符串输入到文本框中,并刷新webgrid bellow(在匹配结果上进行过滤),而不刷新孔页面。现在我的代码可以很好地刷新页面,并在点击按钮时触发过滤。

这是标记:

@model List <BTGHRM.Models.HarmingFactorClass>

@{
    BTGHRM.Models.HarmingFactorClass sorting = new BTGHRM.Models.HarmingFactorClass();
}

@Resources.Localization.filter:
<br />

@using (Html.BeginForm("FactorFieltering", "Administration", FormMethod.Post))
{
<table style = "width:100%" >
    <tr>
        <td style="width:10%">
            @Html.Label("Nr", @Resources.Localization.nr)
        </td>
        <td style="width:90%">
            @Html.Label("Desc", @Resources.Localization.description)
        </td>
    </tr>
    <tr>
        <td>
           @Html.TextBox("nr", sorting.Nr)
        </td>
        <td>
            @Html.TextBox("desc", sorting.Description)
        </td>
    </tr>
</table>
    <input type="submit" value="go" />
}
<br />


@using (Ajax.BeginForm("WorkplaceHealthFactors", null, new AjaxOptions() { UpdateTargetId = "FormContainer", HttpMethod = "Post", InsertionMode = InsertionMode.Replace, OnSuccess = "UpdateSuccess", OnFailure = "UpdateFailure" }, new { id = "UpdateForm" }))
{
    WebGrid grid = new WebGrid(Model, canSort: false);
    int row = 0;

    if (Model.Any())
    {
        @grid.GetHtml(
                htmlAttributes: new { id = "examples" },
                tableStyle: "table",
                headerStyle: "table_HeaderStyle",
                footerStyle: "table_PagerStyle",
                rowStyle: "table_RowStyle",
                alternatingRowStyle: "table_AlternatingRowStyle",
                selectedRowStyle: "table_SelectedRowStyle",
                columns: grid.Columns(
                grid.Column("Nr", @Resources.Localization.nr, format: @<text>
                            <span class="display-mode"><label id="NrLabel">@item.Nr</label></span>
                            @Html.TextBox("Model[" + (++row - 1).ToString() + "].Nr", (object)item.Nr, new { @class = "edit-mode" })
                </text>, style: "p10"),

                grid.Column("Description", @Resources.Localization.description, format: @<text>
                            <span class="display-mode"><label id="DescriptionLabel">@item.Description</label></span>
                            @Html.TextBox("Model[" + (row - 1).ToString() + "].Description", (object)item.Description, new { @class = "edit-mode" })
                            @Html.Hidden("Model[" + (row - 1).ToString() + "].HarmingFactorId", (object)item.HarmingFactorId)
                </text>, style: "p80"),

                        grid.Column("", "", format: @<text>
                            <a href="" id="@item.HarmingFactorId" class="link_button edit-button display-mode">@Resources.Localization.edit</a>
                            <a href="DeleteWorkplaceHealthFactorRecord/@item.HarmingFactorId" id="@item.HarmingFactorId" class="link_button delete-button display-mode">@Resources.Localization.delete</a>
                            <a href="" id="@item.HarmingFactorId" class="link_button update-button edit-mode">@Resources.Localization.update</a>
                            <a href="" id="@item.HarmingFactorId" class="link_button cancel-button edit-mode">@Resources.Localization.cancel</a>
                        </text>)
                    )
                )
    }
}

这是我在控制器中的排序方法:

    [HttpPost]
    public ActionResult FactorFieltering(string desc, string nr)
    {
        using (var db = new HRMEntities())
        {
            List<CatalogHarmingFactor> harmingFactorList = db.CatalogHarmingFactors.Where(e => e.Nr.Contains(nr) && e.Description.Contains(desc))).ToList();
            List<HarmingFactorClass> model = new List<HarmingFactorClass>();
            foreach (var item in harmingFactorList)
            {
                model.Add(new HarmingFactorClass(){Nr=item.Nr, Description=item.Description, HarmingFactorId= item.HarmingFactorId });
            }
            return View("Partial/_WorkplaceHealthFactors", model);
        }
    }

为了解决我的问题,必须添加哪些JS部分?

标记图片: enter image description here

1 个答案:

答案 0 :(得分:2)

  • 在javascript中创建Search()函数。
  • 每次用户在Search()nr文本框内输入
  • 时,都会创建javascript事件以调用desc
  • Search()函数内部使用$.get调用控制器中的局部视图,并返回用户在文本框中键入的数据的局部视图:

<强>控制器:

public class AdministrationController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpGet]
    public PartialViewResult FactorFiltering(string nr,string desc)
    {
        //Write your search functionality and pass the model to the partial view...
        return PartialView("~/Views/Partial/_WorkplaceHealthFactors.cshtml");
    }
}

查看:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script>
<script type="text/javascript">
    $(function () {
        $("#nr").on('keyup', function () {
            Search();
        });

        $("#desc").on('keyup', function () {
            Search();
        });

        function Search() {
            var nr = $("#nr").val();
            var desc = $("#desc").val();

            $.get('@Url.Action("FactorFiltering", "Administration")', { nr: nr, desc: desc }, function (data) {
                $("#result").html(data);
            });
        }
    });
</script>
@Html.TextBox("nr")
@Html.TextBox("desc")
<div id="result">
</div>