C# Web表单模型绑定:如何省略不可见控件的绑定?

C# Web表单模型绑定:如何省略不可见控件的绑定?,c#,asp.net,webforms,controls,model-binding,C#,Asp.net,Webforms,Controls,Model Binding,我正在使用WebForms的新模型绑定功能,即.NET Framework 4.5.1版我希望实现的是,根据某些条件排除一些双向绑定。 我非常喜欢(希望现在出名)。我使用第二种方法实现了一个编辑页面 以下是我所做的:(简化,在ElementEdit.aspx中): 在这里,调用TryUpdateModel()之后,不可见控件更新了模型,这正是我想要避免的 如何根据条件动态忽略某些元素的数据绑定,即使将它们设置为不可见也无济于事? 更新: 现在,我创建了一个变通方法,解决了今天的问题:我只创建了两

我正在使用WebForms的新模型绑定功能,即.NET Framework 4.5.1版我希望实现的是,根据某些条件排除一些双向绑定。

我非常喜欢(希望现在出名)。我使用第二种方法实现了一个编辑页面

以下是我所做的:(简化,在ElementEdit.aspx中):

在这里,调用
TryUpdateModel()
之后,不可见控件更新了模型,这正是我想要避免的

如何根据条件动态忽略某些元素的数据绑定,即使将它们设置为不可见也无济于事?

更新: 现在,我创建了一个变通方法,解决了今天的问题:我只创建了两个.aspx页面,其中包含各自的代码。根据用户应该成功编辑哪些字段,我首先调用相应的页面


但是,这并不能解决基本问题,即条件数据绑定。

这与其说是编码解决方案,不如说是一种算法

我喜欢使用一个单独的类,比如MyData.cs来管理我的数据更新,并通过 这个类的方法。 我类似于存储过程,但您可以在项目中创建查询

如果控件可见和不可见之间存在差异,我建议:

MyBindingMethod(array[] of the controls){
    // Loop through array updating data.
    // Or loop through array and call a second method to update the data.
}
可以动态检查控件的可见性,然后将它们添加到数组中或不添加到数组中 传递给绑定方法

如果切换可见性的控件为常量,则可以使用两种不同的方法, 有选择地更新:

MyBindingMethodAll(){
    // Update all controls.

}

MyBindingMethodVisible(){
    // Update controls that remain visible.

}
然后从aspx.cs调用MyData.cs中的方法。诀窍是在C#中保持对数据绑定的控制,您可以准确地确定更新的内容、位置和时间

如果您能够提供更多的代码,我很乐意提供一个更详细的工作示例


编辑更新以帮助澄清解决方案

通过使用单独的类来管理数据绑定,可以将display元素传递给该单独类的方法。我使用了存储过程

类管理数据

public static void SelectAllSomething(DropDownList list)
    {
        // Clear any previously bound items.
        list.Items.Clear(); 
        // SqlConnection.
        SqlConnection con = new SqlConnection(conString);
        // Create new command and parameterise.
        SqlCommand cmd = new SqlCommand();
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "MyStoredProcedure";

        cmd.Connection = con;
        try
        {
            // Open connection and bind data to GUI.
            con.Open();

            list.DataSource = cmd.ExecuteReader();
            list.DataTextField = "Name";
            list.DataValueField = "ID";
            list.DataBind();

        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            con.Close();
            con.Dispose();
        }
    }
从aspx.cs调用ManageData类中的方法

ManageData.SelectAllCat(MyDropDownList);
使用相同的原则。
没有看到你的布局,我只能给你一个概念性的例子

  • 如果您有要控制的文本框
TextBox1、TextBox2、TextBox3/

public static void AddText(List<TextBox> MyTextBoxes)
{
    for(int i=0; i<MyTextBoxes.Count();i++){
        MyTextBoxes.[i].Text = // What means you are using.
    }

}
publicstaticvoidaddtext(列出mytextboxs)
{

对于(int i=0;iThanks。这似乎是非常动态的。但它看起来相当复杂,并带走了新模型绑定的简单性和美观性。我希望找到一些更简单的解决方案。但是,我现在已经实现了一个解决方案,请看更新。请留下它。我最终会接受它。你能提供一个关于接收到的绑定方法的链接吗我在谷歌上做了一个快速搜索,但到目前为止没有找到更多的控件。
ManageData.SelectAllCat(MyDropDownList);
public static void AddText(List<TextBox> MyTextBoxes)
{
    for(int i=0; i<MyTextBoxes.Count();i++){
        MyTextBoxes.[i].Text = // What means you are using.
    }

}
public List<TextBox> FindVisibleTextBoxes(){

    List<TextBox> MyTextBoxes = new List<TextBox>();
    if(TextBox1.Visible== true){
        MyTextBoxes.Add(TextBox1);
    }

    return MyTextBoxes;

}