ASP .NET MVC 5编辑表单取决于角色和/或状态

时间:2017-08-02 09:23:54

标签: asp.net-mvc

我对MVC很陌生,我面临着如何解决以下问题的问题:编辑表单需要由不同的用户角色更新,意味着每个用户更新不同的字段。我希望在主要信息字段(如材料#,说明等)上显示已禁用且位于可编辑字段下方。

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

第二个问题:我不希望每个用户角色都有一个单独的索引页面。相反,我更喜欢隐藏"编辑"用户不得编辑表单的链接(例如,因为它具有状态'请求')。在Web表单中,我通过使用listview解决了这个问题,并在ItemDataBound中我相应地替换了链接。

MVC领域中针对此类场景的最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用Partial Views代替网络用户控件。对每个部分使用单独的ViewModel,并从部分模型中组合主ViewModel。

您可以检查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)

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

_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")
}

答案 1 :(得分:0)

在MVC中,有一种叫做partial view的东西。基本上,它允许您创建一个可以嵌入任何地方的“部分”视图。您可以根据角色和/或状态嵌入不同的部分视图(在您的案例中包含表单的部分视图)。 如果用户角色等于管理员。那么readValue(json, Object.class)等等。我希望你明白这一点。