首页 文章

将参数传递给telerik asp.net mvc网格

提问于
浏览
18

我有一个telerik asp.net mvc网格,需要根据用户在单独的文本框中输入的搜索条件进行填充 . 网格最初使用ajax方法加载自身以及进行分页 .

如何将搜索参数传递给网格,以便它“每次”调用ajax方法发送这些参数,以响应用户点击另一个页面转到该页面上的数据?

我读了telerik 's user guide but it does not mention this scenario. The only way I have been able to do above is by passing the parameters to the rebind() method on client side using jquery. The issue is that I am not sure if it is the 1728104 way of passing parameters which will always work even after updates. I found this method on this post on telerik'的网站:link text

我必须传递多个参数 . 当telerik网格调用时,控制器中的操作方法会根据搜索参数再次运行查询 .

这是我的代码片段:

$("#searchButton").click(function() {
    var grid = $("#Invoices").data('tGrid');

    var startSearchDate = $("#StartDatePicker-input").val();
    var endSearchDate = $("#EndDatePicker-input").val();

    grid.rebind({ startSearchDate: startSearchDate ,
                    endSearchDate: endSearchDate
                });
});

6 回答

  • 2

    因此根据Telerik的说法,“推荐的方法是在onDataBinding事件中设置参数” .

    function onGridBinding(e) {
    if (cancelGridBinding) {  
        // ...
    }
    else {
        var searchValue = 'something';
        e.data = { search: searchValue };
    }
    

    }

  • 0

    对于我自己,我使用我使用jQuery和javascript对象传递的ViewModel对象,我的View是强大的类型SearchMemberModel,包含我的搜索字段,我的视图中的每个字段都有一个Textbox . 我的数据绑定是将Model传递给控制器 . 然后我用javascript构建我的对象,并在重新调用调用中将它传递给我的控制器 .

    这是我的代码:

    查看和javascrip

    <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Admin.Master" Inherits="System.Web.Mvc.ViewPage<Enquete.Models.SearchMemberModel>" %>
    
    <% using (Html.BeginForm()) {%>
        <%: Html.ValidationSummary(true) %>
    
        <fieldset>
            <legend><%: Resources.Search %></legend>
    
            <div class="editor-label">
                <%: Html.LabelFor(model => model.MemberNumber) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.MemberNumber) %>
                <%: Html.ValidationMessageFor(model => model.MemberNumber) %>
            </div>
    
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Email) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Email) %>
                <%: Html.ValidationMessageFor(model => model.Email) %>
            </div>
    
            <div class="editor-label">
                <%: Html.LabelFor(model => model.FirstName) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.FirstName) %>
                <%: Html.ValidationMessageFor(model => model.FirstName) %>
            </div>
    
            <div class="editor-label">
                <%: Html.LabelFor(model => model.LastName) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.LastName) %>
                <%: Html.ValidationMessageFor(model => model.LastName) %>
            </div>
    
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Phone) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Phone) %>
                <%: Html.ValidationMessageFor(model => model.Phone) %>
            </div>
    
            <div class="editor-label">
                <%: Html.LabelFor(model => model.Active) %>
            </div>
            <div class="editor-field">
                <%: Html.CheckBoxFor(model => model.Active) %>
                <%: Html.ValidationMessageFor(model => model.Active) %>
            </div>
    
            <p>
                <input type="submit" value="<%: Resources.ToSearch %>" id="btnSearch" />
            </p>
        </fieldset>
    
    <% } %>
    
     <%= Html.Telerik().Grid<SerializableMember>()
                    .Name("Grid")
                    .Columns(colums =>
                     {
                         colums.Bound(c => c.Email).Title(Resources.Email);//.ClientTemplate("<a href=\"" + Url.Action(MVC.Admin.Edit()) + "/<#=Id#>\" ><#=Email#></a>");
                         colums.Bound(c => c.FirstName).Title(Resources.FirstName);
                         colums.Bound(c => c.LastName).Title(Resources.LastName);
                         colums.Bound(c => c.MemberNumber).Title(Resources.MemberNumber);
                         colums.Bound(c => c.Active).Title(Resources.Active).HeaderHtmlAttributes(new { @class = "center-text" }).HtmlAttributes(new { @class = "center-text" }).ClientTemplate("<img src=\"Content/images/icons/<#=Active#>.png\" alt=\"<#=Active#>\" />");
                         colums.Bound(c => c.Id).Title(" ").HtmlAttributes(new { @class = "center-text" }).ClientTemplate("<a href=\"" + Url.Action(MVC.Member.ResetPassword()) + "/<#=Id#>\" title=\"" + Resources.ResetPassword + "\" >" + Resources.ResetPassword + "</a>");
                         colums.Bound(c => c.Id).Title(" ").HtmlAttributes(new { @class = "center-text" }).ClientTemplate("<a href=\"" + Url.Action(MVC.Member.Activate()) + "/<#=Id#>\" title=\"" + Resources.Activate + "\" >" + Resources.Activate + "</a>");
                         colums.Bound(c => c.Id).Title(" ").HtmlAttributes(new { @class = "center-text" }).ClientTemplate("<a href=\"" + Url.Action(MVC.Member.Deactivate()) + "/<#=Id#>\" title=\"" + Resources.Deactivate + "\" >" + Resources.Deactivate + "</a>");
                     })
                    //.DataBinding(d => d.Ajax().Select("ListAjax", "Member", Model))
                    .DataBinding(d => d.Ajax().Select(MVC.Member.ListAjax(Model).GetRouteValueDictionary()))
                    .Sortable()
                    .NoRecordsTemplate(Resources.NoData)
            %>
            <%= Html.AntiForgeryToken() %>
    
            <script type="text/javascript">
                $(document).ready(function () {
                    $('#btnSearch').click(function () {
                        var grid = $('#Grid').data('tGrid');
                        var searchModel = {
                            MemberNumber: $('#MemberNumber').val(),
                            Email: $('#Email').val(),
                            FirstName: $('#FirstName').val(),
                            LastName: $('#LastName').val(),
                            Phone: $('#Phone').val(),
                            Active: $('#Active').is(':checked')
                        };
                        grid.rebind(searchModel);
                        return false;
                    });
                });
            </script>
    
            <%= Html.Telerik().ScriptRegistrar().jQuery(false).DefaultGroup(g => g.DefaultPath("~/Content/Javascript/2010.3.1110"))%>
    

    那是我的掌控者

    [GridAction]
        public virtual ActionResult ListAjax(SearchMemberModel search)
        {
            var gridModel = new GridModel<SerializableMember>();
            var data = _session.All<Member>();
            if (search != null)
            {
                if (search.Active) data = data.Where(x => x.Active);
                if (!string.IsNullOrEmpty(search.Email)) data = data.Where(x => x.Email.Contains(search.Email));
                if (!string.IsNullOrEmpty(search.FirstName)) data = data.Where(x => x.FirstName.Contains(search.FirstName));
                if (!string.IsNullOrEmpty(search.LastName)) data = data.Where(x => x.LastName.Contains(search.LastName));
                if (!string.IsNullOrEmpty(search.MemberNumber)) data = data.Where(x => x.MemberNumber.Contains(search.MemberNumber));
                if (!string.IsNullOrEmpty(search.Phone)) data = data.Where(x => x.Phone.Contains(search.Phone));
            }
    
            var list = new List<SerializableMember>(data.Count());
            list.AddRange(data.ToList().Select(obj => new SerializableMember(obj)));
            gridModel.Data = list;
            return View(gridModel);
        }
    

    我也可以给你我的搜索模型类:

    public class SearchMemberModel
    {
        [LocalizedDisplayName("MemberNumber")]
        public string MemberNumber { get; set; }
    
        [LocalizedDisplayName("Email")]
        [DataType(DataType.EmailAddress)]
        public string Email { get; set; }
    
        [LocalizedDisplayName("FirstName")]
        public string FirstName { get; set; }
    
        [LocalizedDisplayName("LastName")]
        public string LastName { get; set; }
    
        [LocalizedDisplayName("Phone")]
        public string Phone { get; set; }
    
        [LocalizedDisplayName("ActiveOnly")]
        public bool Active { get; set; }
    }
    

    希望它可以帮助那里的任何人!

  • 10

    这实际上记录了here .

  • 7
    <script type="text/javascript">
        $(document).ready(function () {
            $('#apply').click(function () {
                var params = { 
                    showDisabled : $('input[name=ShowDisabled]').attr('checked'), 
                    showExpired : $('input[name=ShowDisabled]').attr('checked')
                };
    
                var grid = $('#Grid').data('tGrid');
                grid.rebind(params);
            });
        });
    </script>
    

    这是绑定到select命令的控制器操作:

    [GridAction(EnableCustomBinding=true)]
    public ActionResult _BindGrid(GridCommand command, string mode, int? id, bool showExpired, bool showDisabled)
    {
        return View(new GridModel(GetMessageGridItems(command, mode, id,  showExpired, showDisabled)));
    }
    

    参数'command'具有排序和分页信息 . 注意:此解决方案适用于ajax-ified网格 . 如果您正在进行直接发布帖子,您仍然可以使用GridCommand命令参数来维护分页/过滤/排序的状态 .

  • 0

    尝试一下这个:Telerik MVC Grid External Filter

    它是一个jquery插件,可让您通过自定义输入控件设置过滤器 .

  • 2

    在telerix ajax回发期间,这是一种更容易从表单传回参数的方法 .

    只需挂钩全局$ .ajaxPrefilter事件并使用jquery将from的内容序列化为正在提交的URL . 这将与ASP.MVC模型绑定一起使用

    <script type="text/javascript">
    
    $.ajaxPrefilter(function (options) {
        options.url = options.url + "&" + $("form").serialize();
    });
    
    </script>
    

相关问题