Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
Asp.net 如何以声明方式将“SelectedValue”绑定到数据源字段?_Asp.net_Data Binding_Webforms - Fatal编程技术网

Asp.net 如何以声明方式将“SelectedValue”绑定到数据源字段?

Asp.net 如何以声明方式将“SelectedValue”绑定到数据源字段?,asp.net,data-binding,webforms,Asp.net,Data Binding,Webforms,我想驱动RadioButtonLists SelectedValue属性从数据源中的属性,但我无法使其工作 我有一个我通过扩展原始RadioButtonList控件并修改核心数据绑定方法来支持ListItem对象,从而实现了无缝工作,而不需要在codebehind中手动分配 事情是这样的: public class MyRadioButtonList : RadioButtonList { protected override void PerformDataBinding(IEnume

我想驱动RadioButtonLists SelectedValue属性从数据源中的属性,但我无法使其工作


我有一个我通过扩展原始RadioButtonList控件并修改核心数据绑定方法来支持ListItem对象,从而实现了无缝工作,而不需要在codebehind中手动分配

事情是这样的:

public class MyRadioButtonList : RadioButtonList
{
    protected override void PerformDataBinding(IEnumerable dataSource)
    {
        if (dataSource is IEnumerable<ListItem> listItems)
        {
            ...

            foreach (var listItem in listItems)
                Items.Add(listItem);

            ...
        }
        else
        {
            base.PerformDataBinding(dataSource);
        }
    }    
}
有了它,只需将源模型转换为表示层上的IEnumerable,通过适配器/代理实现即可轻松完成,然后将这些ListItems提供给控件

一旦我准备好了,我就可以根据datasource字段在UI中正确地看到我选择的项目。考虑到扩展是多么微不足道,我觉得它非常值得:

同样的继承方法也可能用于类似的控件,如CheckBoxList,它也有同样的限制


对于更具冒险精神的人,也可以通过在控件中引入额外的DataSelectedField和DataEnabledField属性,并在其上使用Eval作为原始数据绑定算法的一部分来实现这一点,该算法已经对DataTextField和DataValueField执行了这一操作。我觉得这对于我的用例来说会有点复杂,并决定使用一种更简单的覆盖,但这绝对是一种有效的方法,甚至可以与我提出的解决方案一起使用,以获得更强大的RadioButtonList。

非常确定,您必须使用代码隐藏,设置选定的索引或选定的值。SelectedValue不是asp:RadioButtonList控件的有效属性。@wazz SelectedValue绝对有效,只是在intellisense中不显示。我收到一个错误:“SelectedValue”属性不能以声明方式设置。您能在看到@wazz的地方共享一段代码吗?我以前从未见过此错误消息,我只是仔细检查了我的实际生产代码,我可以向您保证RadioButtonList有一个SelectedValue,并且您应该能够以声明方式设置它。@wazz,仅供参考我找到了解决此问题的方法并将其添加为答案。
public static class ItemProvider
{
    public static CollectionWithDefault GetAvailableItems()
    {
        var items = new [] { "option1", "option2", "option3" };

        return new CollectionWithDefault(items, items[1]);
    }
}
<asp:ObjectDataSource runat="server"
    ID="ItemSource"
    TypeName="MyNamespace.ItemProvider"
    SelectMethod="GetAvailableItems" />
<asp:RadioButtonList runat="server" 
    DataSourceID="ItemSource"
    SelectedValue='<%# Eval("DefaultItem") #>' />
public class MyRadioButtonList : RadioButtonList
{
    protected override void PerformDataBinding(IEnumerable dataSource)
    {
        if (dataSource is IEnumerable<ListItem> listItems)
        {
            ...

            foreach (var listItem in listItems)
                Items.Add(listItem);

            ...
        }
        else
        {
            base.PerformDataBinding(dataSource);
        }
    }    
}