ASP .NET MVC 5 根据角色和/或状态编辑表单



我是MVC的新手,我面临着如何解决以下问题的问题:编辑表单需要由不同的用户角色更新,这意味着每个用户更新不同的字段。我想在禁用的主要信息字段(如材料#、描述等(顶部和可编辑字段下方显示。

我来自 Web 表单字段,过去我通过拥有不同的 Web 用户控件 (.ascx( 解决了这个问题。一个用于主数据,第二个用于编辑数据。根据用户角色和记录的状态(例如,创建,请求,批准(,我确实动态加载了Web用户控件。

第二个问题:我不想为每个用户角色设置单独的索引页。相反,我宁愿隐藏"编辑"链接,以防用户无法编辑表单(例如,因为它的状态为"请求"(。在Web表单中,我通过使用列表视图解决了这个问题,并且在ItemDataBound中,我相应地替换了链接。

对于这种情况,MVC 区域中的最佳实践是什么?

可以使用"分部视图"代替 Web 用户控件。对每个部分使用单独的视图模型,并从部分模型组成主视图模型。

您可以在 Razor 标记中检查条件并相应地呈现部分/链接。

例如:

public class ReadOnlyDataViewModel {
public DateTime CreationDate { get; set; }
}
public class EditableDataViewModel {
public string Name { get; set; }
}
public class MainViewModel {
public ReadOnlyDataViewModel ReadOnlyData { get; set; }
public EditableDataViewModel EditableData { get; set; }
public bool HasEditPermission { get; set; }
}

_ReadOnlyData.cshtml

@model ReadOnlyDataViewModel 
@Html.DisplayFor(m => m.CreationDate)

_EditableData.cshtml

@model EditableDataViewModel 
@Html.EditorFor(m => m.Name)

不同的部分也可以使用相同的视图模型,例如将可编辑数据显示为只读:

_EditableDataReadOnly.cshtml

@model EditableDataViewModel 
@Html.DisplayFor(m => m.Name)

Main.cshtml

@model MainViewModel 
@Html.Partial("_ReadOnlyData", Model.ReadOnlyData)
@if (Model.HasEditPermisson) {
@Html.Partial("_EditableData", Model.EditableData)
}
else {
@Html.Partial("_EditableDataReadOnly", Model.EditableData)
}
@* Conditional link *@
@if (Model.HasEditPermisson) {
@Url.Action("Edit", "MyController")
}

在MVC中,有一种叫做部分视图的东西。基本上,它允许您创建一个"部分"视图,可以嵌入到您想要的任何位置。您可以根据角色和/或状态嵌入不同的分部视图(在您的案例中包含表单的分部视图(。 如果用户角色等于管理员。然后@{ Html.RenderPartial("_AdministratorEditForm"); }等等。我希望你明白这一点。

最新更新