Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在模型上添加动态只读属性_C#_Javascript_Asp.net Mvc - Fatal编程技术网

C# 在模型上添加动态只读属性

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

在我的控制器MVC中,我有一个动作来显示我的模型(带有3个字段[Code]、[Libelle]和[IsActif]的通用模型)

[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);
}