以前在我的MVC应用程序中的View to Admin用户(是MVC4 / EF5)中,我使用Grid.MVC轻松显示我的用户并在我的模型上设置Data Annotations以快速设置我想要的方式要在Grid中显示的每个模型属性。
查看:
<!-- Grid.MVC Code -- Can no longer use with Auto-Generated ASP.Net IDENTITY properties-->
<div>
@*Images in Columns: https://gridmvc.codeplex.com/discussions/440977*@
Html.Grid(Model).Columns(columns =>
{
//columns.Add().Encoded(false).Sanitized(false).SetWidth(30).RenderValueAs(o => @Html.CheckBox("checked", false));
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(o => Html.ActionLink("Edit", "Edit", "UserManage", new { id = o.Id }, null));
columns.Add().Encoded(false).Sanitized(false).RenderValueAs(u => Html.ActionLink("Delete", "Delete", "UserManage", new { id = u.Id }, null));
columns.Insert(2, u => u.ProfilePictureUrl).Titled("User Img").Encoded(false).Sanitized(false).RenderValueAs(u => @<img class="" src="@u.ProfilePictureUrl" alt="Current Profile Image" width="75px" height="75px" />);
}).AutoGenerateColumns()
</div>
模型:
上的注释示例public class ApplicationUser : IdentityUser
{
// Setting GridColumn Annotations allows you to use AutoGenerateColumns on view to auto create the Grid based on the model. https://gridmvc.codeplex.com/
[Display(Name = "Name")]
[GridColumn(Title = "Name", SortEnabled = true, FilterEnabled = true, Width = "100")]
public string Name { get; set; }
[Display(Name = "Position")]
[GridColumn(Title = "Position", SortEnabled = true, FilterEnabled = true, Width = "50")]
public string Position { get; set; }
[NotMappedColumn]
public DateTime? RegisteredDate { get; set; }
参加Microsoft TechED之后,仍然在开发中转向MVC5 / EF6,主要是为了使用ASP.Net Identity。在我复制到目前为止完成的所有内容的新项目中,我能够复制我对Grid.MVC的使用,但有一个小问题:新的ASP.Net有几个未在模型中明确列出的用户属性,这些属性也显示在我的Grid.MVC中,例如字段 [PasswordHash],[SecurityStamp],[AccessFailedCount] ,以及表[ AspNetUsers ]中的更多内容。
由于这些Identity属性未在我的模型中明确显示,因此我无法使用 GridMvc.DataAnnotations 将它们设置为[NotMappedColumn]。
我的新视图代码如下所示:
@model IEnumerable<PROJECT.Models.ApplicationUser>
@{
ViewBag.Title = "View Users";
Layout = "MyLayout.cshtml";
}
<div class="row" id="submitRow">
<div class="btn-group ">
<a href="Create"><button type="submit" value="Create" class="btn btn-success">Create User</button></a>
</div>
</div>
<div class="overflowPrevention">
<table class="table">
<tr>
<th></th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
Img
</th>
<th>
Position
</th>
<th>
Registered
</th>
<th>
Last Visited
</th>
<th>
Email
</th>
<th>
Confirmed
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.ActionLink("Edit", "Edit", "UserManagement", new { id = item.Id }) |
@Html.ActionLink("Details", "Details", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.ProfilePictureSrc)
</td>
<td>
@Html.DisplayFor(modelItem => item.Position)
</td>
<td>
@Html.DisplayFor(modelItem => item.RegisteredDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastVisitDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.DisplayFor(modelItem => item.EmailConfirmed)
</td>
</tr>
}
</table>
我已经在网格中正确显示了所有要显示的字段,现在正在处理编辑,详细信息和删除的Actionlinks。从编辑开始,我似乎无法弄清楚我的语法在哪里,因为编辑链接没有链接到单个用户ID,而是链接到以下路径:
local:12345/Admin/UserMgmt/Edit?Length=14
有人对此事有任何想法吗?
答案 0 :(得分:3)
These are the different overloads of Html.ActionLink
你打算做的是
[<强> DisplayText 强>] [<强> ActionMethod 强>] [<强>控制器强>] [<强> RoutingValues 强>
但是当我们查看4参数构造函数时,我们会看到:
ActionLink(HtmlHelper, String, String, Object, Object)
返回指定链接文本,操作,路由值和 HTML属性<的锚元素(元素) /强>
这不是你想要的。但是,this overload包含以下字段:
ActionLink(HtmlHelper, String, String, String, Object, Object)
返回指定链接文本,操作,控制器,路由值和 HTML属性。
<强>解决方案强>
更改此
@Html.ActionLink("Edit", "Edit", "UserManagement", new { id = item.Id })
进入这个
@Html.ActionLink("Edit", "Edit", "UserManagement", new { id = item.Id }, null)