如何在ASP.net网站中实现View Model功能

时间:2012-11-21 19:47:33

标签: c# asp.net asp.net-mvc textbox

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

所以,有几个问题:

  
      
  1. 有没有办法以相当最好的方式做到这一点? (不想使用会话等)
  2.   
  3. 如果没有,有人可以提出更好的方法吗?
  4.   

其中一个textbox的一般外观是:

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

1 个答案:

答案 0 :(得分:1)

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

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

在这种特殊情况下,我会创建一个类作为单个文本框的模型。该类将包含值,CSS类,可能还包含其他一些属性。

public class RowModel
{
    public string Text { get; set; }
    public string CSSClass { get; set; }
    ...
}

然后我会有一个转发器,一个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();
}

甚至创建ObjectDataSource并以声明方式绑定。

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

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