c# - 动态内容的最佳实践

标签 c# asp.net

我有相当广泛的经典 ASP 背景(使用服务器端 javascript),我的公司终于(终于)插入重新编码 ASP.Net 中的所有内容(使用 C#)。我很好地掌握了经典 ASP 中的良好编程实践,并且我通常会尝试确保以“正确”的方式编写代码。我一直在阅读 ASP.Net 教程,感觉自己对基础知识有相当的了解。关于将客户端 javascript 分离到外部 js 文件、将样式保留在外部 css 文件中的标记之外等方面,我有很好的纪律。因此,在阅读这些新手教程时,我理解了代码隐藏页面的概念。将 C# 代码与最终将成为页面标记的代码分开对我来说很有意义。制作 < asp:button > 对象和改变它们的代码隐藏规则非常有意义。

但是,我很难思考如何做一些简单的事情,就像我在经典 ASP 中所做的那样:

<%
   if (condition) {
      %>
         <input type="button" value="click me" onclick="dosomething()" />
      <%
   }
   else {
      %>
         <span>You don't have permission to see the button</span>
      <%
   }
%>

我很难弄清楚我应该如何将您在上面看到的条件内容放入代码隐藏页面。如果我在两种情况下都显示一个按钮,我会制作一个 <asp:button>对象并相应地在代码隐藏页面中设置它的样式 - 但在上面的示例中,我只在条件为真时显示按钮,在条件为假时显示跨度 block 。

我知道您不必将所有 C# 代码都放在代码隐藏页面中。我可以使用 <% %>标记的方式与我在经典 ASP 中所做的方式相同。但是,如果我这样做,那么在我看来,它会降低代码隐藏页面的相关性。例如,我知道您可以使用外部 css 样式表对您的页面进行样式化,同时也可以在各个标签上使用内联样式。但是,我认为这是不好的做法。如果您不知道是在标记中还是在 css 文件中查找影响该元素的相关样式,那么以后就很难调整该元素的样式。

在我看来,您的标记和代码隐藏页面也是如此。必须混合这 2 个只是一个必要的邪恶,还是有更好的方法来做我上面演示的事情?

最佳答案

你可以在你的标记中:

<asp:Button .. Visible="False" />
<asp:Label .. Text="You do not have permissions" Visible="False" />

注意 Visible 属性。 ASP.NET Web 表单建立在对象模型的思想之上,因此按钮和标签是您可以使用的对象。在后面的代码中,您可以:

protected void Page_Load(object sender, EventArgs e) {
    .
    .

    if (Xcondition = true) {
       Button1.visible=  true;
       Label2.Visible = false;
    }
    else {
       Button1.visible=  false;
       Label2.Visible = true;
    }
}

是实现此目的的传统方法。您只需要弄清楚您需要在生命周期中的哪个位置执行此操作,因为加载可能不是最好的(例如 Init 或 PreRender 事件)。如果您只需要在启动时执行一次,请执行 if (!Page.IsPostBack) { .. } 以确保它只运行一次。

关于c# - 动态内容的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16722682/

相关文章:

c# - 是否可以从 Excel 电子表格 (VBA) 中获取 WinForms "Button"?

c# - 在 Windows 移动设备上调试时,如何阻止 Visual C# 2005 崩溃?

c# - 以中等 UAC 完整性级别运行 CLR 应用程序?

c# - CDN 与 View.aspx 文件?

c# - 如何将时间戳转换为日期?

asp.net - "Add controller"的问题,MVC 4

asp.net - 页面生命周期中 session 状态、应用程序状态在哪里?

.net - 是否存在无法使用 ASP.NET MVC 构建的网站

c# - cshtml C#已经存在一个与此连接相关联的打开的DataReader,必须先关闭它

asp.net - 如何使用 AJAX.Net Toolkit PopupExtender 定位 GridViewRow?