C# 在模型上添加动态只读属性
在我的控制器MVC中,我有一个动作来显示我的模型(带有3个字段[Code]、[Libelle]和[IsActif]的通用模型)C# 在模型上添加动态只读属性,c#,javascript,asp.net-mvc,C#,Javascript,Asp.net Mvc,在我的控制器MVC中,我有一个动作来显示我的模型(带有3个字段[Code]、[Libelle]和[IsActif]的通用模型) [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] [ActionName(“AfficheDetailMotif-Rejet”)] [AuthorizeRoleFilter(角色=类型角色.角色.管理员)] public ActionResult AfficheDetailMotionRejet([DefaultValue(In
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
[ActionName(“AfficheDetailMotif-Rejet”)]
[AuthorizeRoleFilter(角色=类型角色.角色.管理员)]
public ActionResult AfficheDetailMotionRejet([DefaultValue(Int64.MinValue)]Int64 id)
{
DetailGeneric dg=newdetailgeneric{Id=Id};
如果(id>0)
{
MotiverJet s=_srvMotifRejet.充电器(id);
CreateMap();
dg=映射器映射;
}
返回视图(“GererMotifRejet”,dg);
}
如果我将Int64.MinValue作为Id发送,那么我的模型将显示为空,准备插入。
但是,当我显示要使用现有Id进行编辑时,我需要将字段[代码]设置为只读模式
最好的解决方案是什么
我考虑在dg.Code中添加[ReadOnly(true)]属性,但如何做到这一点
然而,我可以用javascript实现这一点,但如果用户没有激活javascript,则存在风险
感谢您的帮助。您不能在运行时设置属性(例如在“代码”中) 最好的方法是创建一个视图模型,该模型封装了“编辑”和“创建”模式,然后执行以下两种操作之一: 1) 执行
@if(Model.IsEditMode)
检查,如果为true,则呈现@Html.EditorFor
,如果为false,则呈现@Html.DisplayFor
2) 创建一个绑定到模型的HTML帮助程序,它检查模型数据并基于相同的值调用上述帮助程序之一
无论采用哪种方式,如果您想做出相应的决策,您都需要为创建和编辑视图提供某种“基本”视图模型。我认为可以使用在运行时提供模型元数据,但解决此问题的方法是错误的(解决方案太复杂)
我只想在http post后的模型中确保该实体是可编辑的,并避免在客户端渲染编辑相关内容。属性是使用代码编译并存储在dll中的常量值-这意味着您在技术上无法在运行时“更改”属性值,除非您在运行时生成并编译代码运行时。您可能希望寻找另一种方法来实现同样的目标,而不必关注属性。
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
[ActionName("AfficheDetailMotifRejet")]
[AuthorizeRoleFilter(Roles = TypeRoles.Roles.ADMINISTRATEUR_NATIONAL)]
public ActionResult AfficheDetailMotifRejet([DefaultValue(Int64.MinValue)] Int64 id)
{
DetailGeneric dg = new DetailGeneric { Id = id };
if (id > 0)
{
MotifRejet s = _srvMotifRejet.Charger(id);
Mapper.CreateMap<MotifRejet, DetailGeneric>();
dg = Mapper.Map<MotifRejet, DetailGeneric>(s);
}
return View("GererMotifRejet", dg);
}