【问题标题】:How to form query string?如何形成查询字符串?
【发布时间】:2014-01-15 02:52:38
【问题描述】:

我正在使用这个网站的网格源代码:

http://gridmvc.azurewebsites.net/

但我不明白查询字符串是如何为他的自定义列形成的。在我提供的链接上有一个编辑列,如果您将鼠标悬停在链接上,您可以看到带有查询字符串 ID 的超链接。我已经使用了这个源代码,但没有适合我的查询字符串。

控制器代码

 #region PartialViews
        [ChildActionOnly]
        public ActionResult RenderGrid()
        {
            DataLayer.RepositoryClient RC = new RepositoryClient();
            var People = RC.GetPeople();
            return PartialView("~/Views/Client/PartialViews/P_PersonGrid.cshtml", People);
        }

 #endregion

我从实体框架中获得了一份人员名单。然后我在局部视图中使用模型列表。

部分视图

@model List<Models.modelPeopleGrid>
@using GridMvc.Html

@{
    ViewBag.Title = "Person records";
}
<div>
 @Html.Label("Search for person")
    <input type="text" onkeyup="activateSearch()" id="txtSearch" style="width:150px";/>
</div>

<div class="grid-wrap" style="float:left">
    @Html.Grid(Model).Named("peopleGrid").Columns(columns =>
    {
        columns.Add(m => m.Firstname).Titled("Firstname").Filterable(true);
        columns.Add(m => m.Surname).Titled("Surname").Filterable(true);
        columns.Add(m => m.DateOfBirth).Titled("DateOfBirth").Filterable(true);
        columns.Add(m => m.Address).Titled("Address").Filterable(true);
        columns.Add(m => m.Borough).Titled("Borough").Filterable(true);
        columns.Add(m => m.PersonID).Encoded(false).Sanitized(false).SetWidth(30).RenderValueAs(
                @<b>
                    @Html.ActionLink("Edit person details", "EditPerson", "Index")
                </b>);
        columns.Add()
            .Encoded(false)
            .Sanitized(false)
            .SetWidth(30)
            .RenderValueAs(m =>
                @<b>
                    @Html.ActionLink("Add/remove claims", "EditClaim", "Index")
                </b>);
    }).WithPaging(20)
</div>

<div class="rowValues" style="float:right"></div>


<script>
    $(function () {
        pageGrids.peopleGrid.onRowSelect(function (e) {
            $(".rowValues").html(
                "<h4>Full details of person:</h4>" +
                "Firstname: " + e.row.Firstname + "<br />" +
                "Surname: " + e.row.Surname + "<br />" +
                "DateOfBirth: " + e.row.DateOfBirth + "<br />" +
                 "Address: " + e.row.Address + "<br />" +
                  "Borough: " + e.row.Borough + "<br />"
                );
        });
    });
</script>

<script type="text/javascript">

    function activateSearch() {
        var value = $("#txtSearch").val();

        $.ajax({
            url: "Client/GetPeople",
            dataType: 'html',
            type: "GET",
            data: { Name: value },
            success: function (data) {
                $('.webgrid').empty().html(data);
            },
            error: function () {
                alert("error");
            }
        });
    }
</script>

我不知道如何获取为这行代码形成的查询字符串:

 columns.Add(m => m.PersonID).Encoded(false).Sanitized(false).SetWidth(30).RenderValueAs(
                    @<b>
                        @Html.ActionLink("Edit person details", "EditPerson", "Index")
                    </b>);

我尝试将 html 对象属性作为 actionlink 的第四个参数,但由于某种原因,我得到了一个红色的 swiggly。

有人知道如何回答我的问题吗?

【问题讨论】:

    标签: asp.net-mvc-4 razor query-string mvcgrid


    【解决方案1】:

    如您链接到的网站上的示例所示,RenderValueAs 方法采用 lambda 表达式,其中参数表示该行的当前模型。

    我尝试将html对象属性作为actionlink的第四个参数 但由于某种原因,我得到了一个红色的swiggly。

    Visual Studio 中的 Razor Intellisense 和语法高亮通常有很多问题。永远不要相信它。您在 Razor 页面中出现红色曲线这一事实并不意味着您的语法有错误。在大多数情况下,这意味着语法荧光笔根本不理解语法。唯一可靠的是运行您的应用程序并查看它是否有效。

    因此,考虑到这一点,您可以尝试:

    columns
        .Add(m => m.PersonID)
        .Encoded(false)
        .Sanitized(false)
        .SetWidth(30)
        .RenderValueAs(m =>
            @<b>
                @Html.ActionLink(
                    linkText: "Edit person details", 
                    actionName: "EditPerson", 
                    controllerName: "Index",      // <-- Huh, Index looks like an action name, double check that
                    routeValues: new { id = m.PersonID }, 
                    htmlAttributes: null
                )
             </b>
        );
    

    请注意我如何使用显式参数名称来使代码更具可读性,并避免与框架设计者为我们提供的大量 ActionLink 方法重载产生歧义。

    【讨论】:

    • 感谢您的帮助达林,它现在可以工作了。该网格网站上的示例有点令人困惑,因为他显示了网格的源代码,但没有显示他如何形成查询字符串。
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多