c# - 将控制值作为 html.Pagedlist 参数传递

标签 c# jquery ajax asp.net-mvc pagedlist

我正在使用分页列表来显示值列表。显示器工作正常。我使用提供的 Unobtrusive AJAX 来获取其他页面的数据。

这就是我的分页控件的外观。

@Html.PagedListPager(Model.CountryList, page => Url.Action("GetCountries", "Dashboard", new {page}), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(PagedListRenderOptions.ClassicPlusFirstAndLast, new AjaxOptions()
{
    HttpMethod = "POST",
    UpdateTargetId = "panel1",
    OnSuccess = "onAjaxSuccess",
    OnFailure = "onAjaxFailure"
})) 

这很好用。

现在我在页面中有一个文本框和一个下拉框,我想传递其中存在的值以及 Html 分页列表。

@Html.TextBox("SearchCountryName", new { name = "SearchCountryName", @class = "form-control", placeholder = "Search Country" })

@Html.DropdownList("Continent", ContinentList)

我的 Controller 代码是:

public PartialViewResult GetDashboardBody(string country,string continent,int? page)
{

}

我想做一些类似的事情

@Html.PagedListPager(Model.CountryList, page => Url.Action("GetCountries", "Dashboard", new {country = $("#SearchCountryName").val(),continent = $("#Continent").val(),page}), PagedListRenderOptions.EnableUnobtrusiveAjaxReplacing(PagedListRenderOptions.ClassicPlusFirstAndLast, new AjaxOptions()
{
    HttpMethod = "POST",
    UpdateTargetId = "panel1",
    OnSuccess = "onAjaxSuccess",
    OnFailure = "onAjaxFailure"
})) 

但这不起作用。

那么如何使用 html.PagedList 将控件的当前值作为参数传递给操作方法?

最佳答案

您需要在客户端处理此问题,因为 Razor 不知道用户选择了什么。请记住:页面呈现后,Razor 就不再是该过程的一部分。

这是我在最近的项目中使用的:

<div class="text-center" id="pagingControl">
    <input type="hidden" id="selectedOption" name="selectedOption" />
    @Html.PagedListPager(Model.Logs, page => Url.Action("Index", "Log",
        new { page = page }),
        PagedListRenderOptions.ClassicPlusFirstAndLast)
</div>

在文档加载中包含以下内容,

$('#pagingControl').find('a[href]').on('click', function (e) {
        e.preventDefault();
        $("#selectedOption").val("something"); // When you submit, you can read this field on the controller and pass it on
        var page = utilities.getQueryStringValue(this, 0).replace('page=','');
        $('#AdvancedSearchForm').submit();
    }
});

效用函数(不是我的,虽然不记得在哪里找到它)就是这样,

getQueryStringValue: function (anchor, index) {
    var queryString = $(anchor).attr('href').split('?')[1];
    var values = queryString.split('&');
    return values[index];
}

所以技巧是拦截用户对分页控件的单击,使用隐藏字段提交您想要的任何值,然后读取 Controller 上的值。在本例中,我有一个名为 selectedOption 的隐藏字段;根据需要添加其他内容,并使用用户提供的值在 JavaScript 中填充它们。然后在表单上提交。

请注意,此处表单的方法是 POST。您还需要将 FormCollection 传递到您的操作中,以便您可以读取发布的隐藏字段。

关于c# - 将控制值作为 html.Pagedlist 参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50726173/

相关文章:

c# - 如何将时间戳转换为日期?

javascript - Jquery 代码适用于 Windows,但不适用于 Mac 或 Safari

javascript - 如何使用 JavaScript 更新保存在 JSON 文件中的数据?

c# - 在用户控件 asp.net 中声明事件?

c# - Windows 窗体启动画面 - 在加载主窗体时显示窗体

c# - Visual Studio 自动格式化没有正确格式化我的 Razor 代码

jquery - 将数据存储在来自 post jquery 的变量中

jquery jpicker 被浏览器顶部切断

php - 来自 Ajax 和 php 的错误响应

asp.net - 使用 Windows 身份验证、AJAX、ASMX 和外部 ISA 的 HTTP 401 过多