如何形成查询字符串?

时间:2013-12-27 13:54:38

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

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

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>);

enter image description here

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

任何人都知道如何回答我的问题?

1 个答案:

答案 0 :(得分:1)

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

  

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

通常,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方法的重载过多的含糊不清。