MGO*_*wen 8 asp.net user-interface user-controls master-pages
我有一个充满页面和用户控件的应用程序,其中许多都有一个或多个标签控件,用于向用户显示各种不同的消息.
示例:通常在Company.aspx页面上使用的AddCompany.ascx用户控件(使用App.Master MasterPage)上面有一个名为"OutOfCreditLabel"的标签,其中包含Text ="错误:您无法创建新公司,因为您已经出局信用".代码检查信用额度并在需要时显示标签.
我想摆脱所有这些标签,只是有一个我可以从任何地方调用的方法
ShowUserMessage("Text goes here");
Run Code Online (Sandbox Code Playgroud)
在之前的项目中,我已将其实现为母版页上的单个标签和.master.cs中的公共方法 - 只要页面具有该行
<%@ MasterType VirtualPath="~/App.master" %>
Run Code Online (Sandbox Code Playgroud)
在它,这工作 - 但我无法让它在用户控件(.ascx.cs)上工作.这有诀窍吗?
或者,还有更好的方法?
对于可在网站中的任何位置使用的"全局"用户消息方法,您会建议什么?
也许是任何不错的jQuery解决方案?
更新
RPM1984已要求进一步澄清,所以我试图以不同的方式问这个问题:
我需要一个方法,我可以从代码隐藏(页面或用户控件)调用,然后将显示我指定给用户的任何文本,例如stackoverflow在您下次访问网站时如何告诉您有关问题的新答案.它可以在窗口的顶部(如SO)或页面的某个位置,无关紧要.重要的是它是一种"全局"方法,而不是各种javascript警报和asp:标签遍布项目中的每个其他页面和用户控件.
像这样的场景:
用户单击我页面上"widget manager"用户控件上的"Create Widget"按钮.在事件处理程序中:
if (User.IsOutOfCredit)
{
ShowUserMessage("Sorry, you cannot create widgets; you are out of credit.");
}
Run Code Online (Sandbox Code Playgroud)
这导致用户看到"抱歉,你不能创建小部件;你没有信用." 无论是在某个页面的弹出页面还是红色文本中,或者像StackOverflow一样在顶部,一切都很好
那有意义吗?
为什么不采用简单的 HTML“老式”扩展方法呢?(即静态方法)
namespace Web.Helpers
{
public class HtmlHelpers
{
public static string Label(string target)
{
var dynamicText = SomeWhere.GetSomeCoolText();
return String.Format("<label for='{0}'>{1}</label>", target, dynamicText);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你的 HTML 中:
<%= HtmlHelpers.Label("sometarget") =>
Run Code Online (Sandbox Code Playgroud)
在您的主母版页中,只需导入名称空间:
<%@ Import Namespace="Web.Helpers" %>
Run Code Online (Sandbox Code Playgroud)
问题更新后编辑
好的,我明白你现在想做什么。我建议全部在客户端进行。
也就是说,在您的主母版页中,创建一个<div>具有唯一 id 的初始隐藏:
<div id="message" style="display: none"></div>
Run Code Online (Sandbox Code Playgroud)
然后在您的 Web 项目中的某个位置创建一个辅助方法,呈现一些脚本。
public void DisplayMessage()
{
string message = SomeWhere.GetSomeCoolText();
StringBuilder script = new StringBuilder();
script.AppendFormat("$('message').show().append("<span>{0}</span>")", message);
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), script.ToString(), true);
}
Run Code Online (Sandbox Code Playgroud)
当然,这只是一个指导方针。您不必使用 jQuery,也不必在方法中对脚本进行硬编码。您可以创建一个接受字符串并修改 div 的 HTML 的 JavaScript 函数,然后调用该函数。
这完全取决于您的“消息”有多复杂,是否需要特殊的服务器控制、国际化等。
但这肯定是实现你想要的最简单的方法(恕我直言)。
| 归档时间: |
|
| 查看次数: |
3985 次 |
| 最近记录: |