我对MVC很陌生,我面临着如何解决以下问题的问题:编辑表单需要由不同的用户角色更新,意味着每个用户更新不同的字段。我希望在主要信息字段(如材料#,说明等)上显示已禁用且位于可编辑字段下方。
我来自网络表单字段,我过去通过使用不同的网络用户控件(.ascx)解决了这个问题。一个用于主数据,一个用于编辑数据。根据用户角色和记录的状态(例如创建,请求,批准),我确实动态加载了Web用户控件。
第二个问题:我不希望每个用户角色都有一个单独的索引页面。相反,我更喜欢隐藏"编辑"用户不得编辑表单的链接(例如,因为它具有状态'请求')。在Web表单中,我通过使用listview解决了这个问题,并在ItemDataBound中我相应地替换了链接。
MVC领域中针对此类场景的最佳做法是什么?
答案 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)
等等。我希望你明白这一点。