Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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# 具有具有默认值的nullable属性的自定义控件_C#_.net_Asp.net_User Controls_Nullable - Fatal编程技术网

C# 具有具有默认值的nullable属性的自定义控件

C# 具有具有默认值的nullable属性的自定义控件,c#,.net,asp.net,user-controls,nullable,C#,.net,Asp.net,User Controls,Nullable,我可以使用默认值创建自定义控件: private bool exclue = false; public bool Exclude { get { return exclue; } set { exclue = value; } } 我可以使用可为null的属性创建相同的对象: private EntityStatuses? status = EntityStatuses.Active; public EntityStatuses? Status { get { return status;

我可以使用默认值创建自定义控件:

private bool exclue = false;
public bool Exclude { get { return exclue; } set { exclue = value; } }
我可以使用可为null的属性创建相同的对象:

private EntityStatuses? status = EntityStatuses.Active;
public EntityStatuses? Status { get { return status; } set { status = value; } }
但是,在使用自定义控件时,如何在标记中将属性设置为null

<MyControls:Control ID="Con" runat="server" Status="?" >

为什么不将status设置为null,并且只在标记中设置时才更改它

private EntityStatuses? status = null;
public EntityStatuses? Status { get { return status; } set { status = value; } }


使用两种不同类型的属性:

<MyControls:Control runat="server" StatusString="Active" />

public string StatusString // string! because all values in markup are strings
{
    set
    {
        EntityStatuses s;
        if (Enum.TryParse(value, out s))
            this.status = s; // local variable
    }
}

public EntityStatuses Status
{
    get { return this.status; }
}

公共字符串StatusString//string!因为标记中的所有值都是字符串
{
设置
{
实体状态;
if(枚举TryParse(值,out s))
this.status=s;//局部变量
}
}
公共实体状态
{
获取{返回this.status;}
}
或使用嵌入式代码块:

<MyControls:Control runat="server" Status='<%= EntityStatuses.Active %>' />

对于需要在标记中设置为null的nullable属性,有一个变通方法(有限制)

不幸的是,
在null值的情况下不起作用,因为服务器控件上属性的字符串值被计算并解析为所需的类型(只有简单值,而不是表达式)。但这应该适用于数据绑定构造:

<MyControls:Control ID="Con" runat="server" Status="<%#(EntityStatuses?)null %>">

现在,问题是:使用数据绑定表达式需要在控件本身或整个页面上执行
DataBind()
方法。最简单的方法是确保调用控件的
DataBind()
方法


因此,这只是一个有限制的解决方法。

我希望有一个非空的默认值。我通常需要某种配置。我只想在需要设置的时候将其设置为空。要么我不理解你写的内容,要么你不理解我的意思。上面代码中的什么使默认值不同于null?我想要的是一个不为null的默认值,并在标记中将该值设置为null。谢谢你的邀请reply@user239427:应在类内设置默认值。属性值可以从类中设置,例如从标记中设置。所以这只是设置属性值,而不是默认属性值。也可以看到我的最新帖子。所以我知道没有“正确”的方法来做这件事?
<MyControls:Control ID="Con" runat="server" Status="<%#(EntityStatuses?)null %>">