C#在哪里放置查看特定信息?

Posted

技术标签:

【中文标题】C#在哪里放置查看特定信息?【英文标题】:C# Where to put view specific information? 【发布时间】:2011-03-07 00:33:11 【问题描述】:

我正在尝试减少我的 asp.net 网络表单中存在的代码重复。这是从数据库加载的示例对象的样子。

Apartment
  int id
  decimal rent
  bool callForPricing
  int squareFeet
  int beds
  int baths

现在我在几个不同的 asp.net 页面中从这个对象创建视图(即包含多个公寓的列表、详细视图等)。过去我所做的是创建另一个包装 Apartment 类的类。像这样的...

ApartmentView

  Apartment apt

  public virtual String Rent
  
     get 
      
        if (apt.CallForPricing)
        
           return "Call For Pricing"; 
        else
           return apt.Rent.ToString("C") + "/Month";
        
     
  

  public virtual String BedsBathsSqFt
  
     get 
      
        if (apt.squareFeet > 0)
        
           return apt.beds + " Beds|" + apt.beds + " Beds|" + apt.SquareFeet + " sqft"; 
        else
           return apt.beds + " Beds|" + apt.beds + " Beds";
        
     
  

如您所见,我通常只是创建数据的字符串表示形式。我考虑过让 ApartmentView 类扩展 Apartment 类,但没有因为像“Rent”这样的重叠属性。我只是想知道人们通常如何处理这种情况。这是要使用的正确命名约定吗?

【问题讨论】:

【参考方案1】:

对于任何网络表单项目来说,这是一个难以解决的难题。对于条件格式逻辑,您有两种选择 - 在页面本身中(现在您必须在整个站点上复制它),或者在您正在做的某些代码中。就关注点分离而言,两者都不是很好的选择,这是 ASP.Net 网络表单模型的一个众所周知的缺点。

我个人会将您的视图转换为包含 FormView 控件的 .ascx Web 用户控件,并将其数据绑定到您的公寓包装对象。类似的东西:

<asp:FormView ID="FormView1"
  DataSourceID="ObjectDataSource1"
  RunAt="server">

  <ItemTemplate>
    <table>
      <tr>
        <td align="right"><b>Rent:</b></td>       
        <td><%# Eval("Rent") %></td>
      </tr>
      <tr>
        <td align="right"><b>BedsBathsSqFt:</b></td>     
        <td><%# Eval("BedsBathsSqFt") %></td>
      </tr>
    </table>                 
  </ItemTemplate>                 
</asp:FormView>

让 .ascx 公开 DataSource 属性,以便可以由使用它的页面设置。

如果数据绑定对条件表达式更灵活,您可以取消单元包装对象并将条件直接嵌入到用户控件中。但是,由于您的属性的复杂性,这可能会令人头疼。但是,您可以查看 something like this,人们试图在其中绕过这些限制。

【讨论】:

以上是关于C#在哪里放置查看特定信息?的主要内容,如果未能解决你的问题,请参考以下文章

在哪里可以查看Response Headers信息? 如何查看网页的响应头

查看Docker里的镜像信息

target.logElementTree() 从哪里检索信息?

windows下的日志信息在哪里,怎么查看

以编程方式将控件放置在 div 中

windows下的日志信息在哪里,怎么查看