C# 如何在ASP.net网站中实现视图模型功能

C# 如何在ASP.net网站中实现视图模型功能,c#,asp.net,asp.net-mvc,textbox,C#,Asp.net,Asp.net Mvc,Textbox,我正在使用一个asp.NET网站--这是我不习惯的。我有一个页面,上面有大量的asp:Textbox控件,所有控件都带有runat=“server”,我还有一个数据表。基本上,我想实现某种类似MVC模型的功能,这样我就可以为每个textbox分配值 因此,有几个问题: 是否有某种方法可以以最佳实践的方式做到这一点?(不想使用会话等) 如果没有,有人能提出更好的方法吗 文本框之一的一般外观如下: <asp:Textbox runat="server" class="number" name=

我正在使用一个asp.NET网站--这是我不习惯的。我有一个页面,上面有大量的
asp:Textbox
控件,所有控件都带有
runat=“server”
,我还有一个
数据表
。基本上,我想实现某种类似MVC模型的功能,这样我就可以为每个
textbox
分配值

因此,有几个问题:

  • 是否有某种方法可以以最佳实践的方式做到这一点?(不想使用会话等)
  • 如果没有,有人能提出更好的方法吗
  • 文本框之一的一般外观如下:

    <asp:Textbox runat="server" class="number" name="ns_loanAmt" id="ns_loanAmt" value="???" />
    

    这个问题似乎很老了,出于某种原因,它已经被编辑过了,所以可能还有人对它感兴趣

    我想知道为什么OP没有考虑内置int web表单绑定。虽然现在我主要使用MVC,但多年来,我们都使用ASP.NET数据绑定开发了几十个应用程序,它肯定能工作

    在这个特殊的例子中,我将创建一个类,作为单个文本框的模型。该类将包含值、CSS类,可能还有一些其他属性

    public class RowModel
    {
        public string Text { get; set; }
        public string CSSClass { get; set; }
        ...
    }
    
    然后我会有一个repeater、gridview或listview,我会在行模板中放置一个文本框

    <asp:ListView ID="listView1" runat="server">
      ...
      <ItemTemplate>
         <asp:TextBox id="textBox" runat="server" 
                      cssclass="<%# CSSClass %>" Text="<%# Text %>" /> 
      </ItemTemplate> 
    
    
    ...
    
    然后,在代码隐藏中,我将只将模型实例列表绑定到可绑定控件

    List<RowModel> rowList;
    ...
    if ( !this.IsPostBack )
    {
       listView1.DataSource = rowList;
       listView1.DataBind();
    }
    
    列表行列表;
    ...
    如果(!this.IsPostBack)
    {
    listView1.DataSource=行列表;
    listView1.DataBind();
    }
    
    甚至创建一个
    ObjectDataSource
    并以声明方式绑定

    然后,在每次回发后,可以读取已发布值的列表并将其放回数据库


    ASP.NET Web表单绑定始终有效,并且由于自动viewstate管理,特定场景甚至比手动、类似MVC的状态管理简单得多。例如,listview中提供的插入和编辑模板很容易切换,这在普通MVC中需要一些努力(尽管您可以更好地控制发生的事情)。

    这个问题似乎很老,出于某种原因,它已经被编辑过,所以可能有人仍然感兴趣

    我想知道为什么OP没有考虑内置int web表单绑定。虽然现在我主要使用MVC,但多年来,我们都使用ASP.NET数据绑定开发了几十个应用程序,它肯定能工作

    在这个特殊的例子中,我将创建一个类,作为单个文本框的模型。该类将包含值、CSS类,可能还有一些其他属性

    public class RowModel
    {
        public string Text { get; set; }
        public string CSSClass { get; set; }
        ...
    }
    
    然后我会有一个repeater、gridview或listview,我会在行模板中放置一个文本框

    <asp:ListView ID="listView1" runat="server">
      ...
      <ItemTemplate>
         <asp:TextBox id="textBox" runat="server" 
                      cssclass="<%# CSSClass %>" Text="<%# Text %>" /> 
      </ItemTemplate> 
    
    
    ...
    
    然后,在代码隐藏中,我将只将模型实例列表绑定到可绑定控件

    List<RowModel> rowList;
    ...
    if ( !this.IsPostBack )
    {
       listView1.DataSource = rowList;
       listView1.DataBind();
    }
    
    列表行列表;
    ...
    如果(!this.IsPostBack)
    {
    listView1.DataSource=行列表;
    listView1.DataBind();
    }
    
    甚至创建一个
    ObjectDataSource
    并以声明方式绑定

    然后,在每次回发后,可以读取已发布值的列表并将其放回数据库


    ASP.NET Web表单绑定始终有效,并且由于自动viewstate管理,特定场景甚至比手动、类似MVC的状态管理简单得多。例如,listview中提供的插入和编辑模板很容易切换,这在普通MVC中需要一些努力(尽管您可以更好地控制所发生的事情)。

    您是否尝试过使用代码隐藏文件并将逻辑放入页面加载?@DigitalD考虑过,但如果不需要的话,我不想手动设置每个值。如果没有什么“更干净”的东西可以做,那就是我要做的,尽管MVC有内置modelbinder的功能,普通ASP.net web表单没有。@DigitalD这就是问题所在:P我想实现我自己的。但我想我可能会按照你最初的建议去做,如果你觉得ASP.NETMVC解决了你的问题,那就换成ASP.NETMVC吧。这会很困难吗?你试过使用代码隐藏文件并将逻辑放入页面加载吗?@DigitalD想了想,但如果不需要的话,我不想手动设置每个值。如果没有什么“更干净”的东西可以做,那就是我要做的,尽管MVC有内置modelbinder的功能,普通ASP.net web表单没有。@DigitalD这就是问题所在:P我想实现我自己的。但我想我可能会按照你最初的建议去做,如果你觉得ASP.NETMVC解决了你的问题,那就换成ASP.NETMVC吧。那会很难吗?