0

我想要使用@ Html.EnumDropDownListFor,并且遇到问题。使用EnumDropDownListFor绑定到对象的属性

这是我有:

@Html.EnumDropDownListFor(x => x.DefaultProviderEnum, 
       "Select default provider", new { @class = "form-control", id = "pro" }) 

哪里DefaultProviderEnumProviderFormat类型:

public enum ProviderFormat 
{ 
    [Description("ASG")] 
    ASG = 1, 
    [Description("SCS")] 
    SCS = 2 
} 

我在模型中正确设置它,它在加载正确显示。我有这个问题是,当我将它张贴我不得不手动设置它在我的对象,而不是将它绑定到一个属性我的对象,这是一个int上:

model.CU.DefaultProviderInt = (int)model.DefaultProviderEnum; 

是否有可以枚举绑定的方式下降到对象的属性,而不必这样设置它?

+0

什么是'model.CU.DefaultProvider'?你提到属性的类型是'ProviderFormat',后来你说它是'int'类型的?你省略了'CU.DefaultProvider'的功能。 – adiga

+0

DefaultProvider只是CU对象上的一个int。我试图将DefaultProvider设置为类型为'ProviderFormat'的模型。 –

回答

1

model.CU对象也将获得通过的任何值已经提供的表单的提交ModeBinder约束(绑定?)。

所以,在你的表格,你可以有一个隐藏属性是这样的:

@Html.HiddenFor(x => x.CU.DefaultProviderInt, new { id = "cu-default-provider" }) 

然后,change事件处理程序添加到DefaultProviderEnum下拉列表,并与select值设置隐藏的输入的值。

$(function() { 
    $("#DefaultProviderEnum").change(function(){ 
     $("#cu-default-provider").val($(this).val()); 
    }) 
}); 

现在,当表单被提交时,两个属性将具有相同的值。


还有另一种方法可以做到这一点。 如果您在代码的某处手动设置DefaultProviderEnum的值,上述代码将不起作用。所以,你可以为DefaultProviderEnum属性定制的setter:

private ProviderFormat defaultProviderEnum; 

public ProviderFormat DefaultProviderEnum 
{ 
    get { return defaultProviderEnum; } 
    set 
    { 
     if (this.CU != null) 
     { 
      this.CU.DefaultProviderInt = (int)value; 
     } 

     defaultProviderEnum = value; 
    } 
} 

但是,这也可能取决于其中DefaultModelBinder结合性质的量级。 (如果CU为空时DefaultProviderEnum被设定,那么这可能无法正常工作。因此,请务必在模型的构造函数初始化CU


第三和最好办法做到这一点是手动施放枚举为int并将其设置为CU.DefaultProviderInt

1

你有什么问题?如果该字段绑定到DefaultProviderEnum,那么这是模型绑定器唯一设置的东西,无论如何,因此需要一些手动干预来设置不同的属性。没有办法让模型绑定器根据一个发布的值设置两个属性,如果那是你正在咆哮的树。

但是,你可以简单地有这样一个属性:

public int DefaultProviderInt => (int)DefaultProviderEnum; 

然后,它会永远只返回枚举的价值,不管这恰好是在目前的INT胁迫。

+0

我试图用树的下拉列表填充由一个枚举使用帮助器的树,并将它设置在一个int对象上的属性。如果我只是将默认提供程序属性从int更改为ProviderFormat枚举,它将按我想要的方式工作,只是想知道是否有方法将int用作使用此帮助程序设置的属性。 –

+0

否。如果您发布枚举,则必须绑定到枚举。 –