我正在使用本网站的网格源代码:
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。
任何人都知道如何回答我的问题?
答案 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方法的重载过多的含糊不清。