我经常发现自己处于这样的情况,我只想在我的模型中呈现和编辑某些字段。假设我有一个代表地址的模型,也许我只想让表单更新城市并发布代码字段(不好的例子,但希望它解释了这个场景)。
我知道两种方法:
1)在表单上的隐藏输入元素中保留不需要的字段,或者...... 2)创建一个专用的视图模型,只定义我需要的字段。
我赞成选项#2,但是我没有一个很好的方法将视图模型中的数据合并回控制器操作中的“真实”模型。目前,我遵循这种方法......
1)将记录存储在视图模型的隐藏字段中 2)当页面回发时,控制器检索原始记录,并手动将视图模型中的每个字段分配给实际模型 3)将真实模型保存回数据存储。
这是有效的,但这是相当多的工作,很容易错过任务/重新分配,我想知道是否有人知道另一种方法?
答案 0 :(得分:1)
使用System.ComponentModel.DataAnnotations.MetadataType。
类似的东西:
public class BaseClassOfProperties
{
public string Name { get; set; }
}
public interface INameViewableProperties
{
[Display(name = "Your Name")]
string Name { get; set; }
}
public interface INameHiddenProperties
{
//[scaffoldColumn(false)] this completely hides the fields
[UIHint("Hidden")] // i think...
string Name { get; set; }
}
[MetadataType(typeof(INameViewableProperties)]
public class NameViewAbleProperties : BaseClassOfProperties
{
}
[MetadataType(typeof(INameHiddenProperties)]
public class NameHiddenProperties : BaseClassOfProperties
{
}