我使用带有.NET的webforms / masterpage。
我的页面中有很多Web用户控件。
我是否可以在某些“字符串”中进行替换?
就像,如果.NET生成:
<div>Hello my Name is Marco</div>
将其更改为:
<div>Hi, my Name is Luca</div>
有可能吗?或者我每次获取这些数据时都需要创建我的特定实用程序(来自数据库)并且我做了一个response.write?
答案 0 :(得分:2)
ASP.Net WebForms方法是使用标签控件并在后面的代码中设置名称。
所以你的aspx文件将包含
<div>Hello my Name is <asp:Label id="NameLabel" runat="server"/></div>
你的代码是隐藏文件,即aspx.cs将包含
NameLabel.Text = "Luca"
如果你想要实现一些脏东西,可以使用过滤器来修改HTTP响应。本文将更详细地解释。 http://www.4guysfromrolla.com/articles/120308-1.aspx但我不建议使用此功能。
答案 1 :(得分:1)
您应该能够撰写IHttpModule
并将其与PreSendRequestContent
事件联系起来,并在此处进行替换。看看这里提出的解决方案:http://www.tek-tips.com/viewthread.cfm?qid=1149673
答案 2 :(得分:0)
使用这种技术,您可以在不重新编译的情况下,将显示给用户的消息更改为保持数据,逻辑和ui问题分开。它并不“简单”,但很干净。
免责声明:不是使用IDE编写的
网络表单
<div><asp:Literal id="litHelloMessage" runat="server" text="<%=GetHelloMessage() %>" />
<asp:Literal id="litName" runat="server" text="<%=User.Name %>"/>
代码背后
public class MyPage : Page
{
public User User { get; set; }
public void Page_Load()
{
// logic to fetch the user from your persistence store
// e.g. User = MyUserRepo.Fetch(uid);
// Important
DataBind();
}
public string GetHelloMessage()
{
// this is straight forward, alternatively you could have some logic here to
// derive which which message is shown to the user
litHelloMessage = GetLocalResourceObject(User.MessageResourceKey).ToString();
}
}
资源文件(App_LocalResources / mypage.resx)
Key Value
"HelloMessage" "Hello my Name is"
"HiMessage" "Hi, my Name is"
用户类
public class User
{
public string Name { get; set; }
public string MessageResourceKey { get; set; }
}
示例数据
Name MessageResourceKey
"Marco" "HelloMessage"
"Luca" "HiMessage"
答案 3 :(得分:-2)
您需要的是模板引擎。 这是维基百科的一个良好开端 http://en.wikipedia.org/wiki/Template_engine_(web)
或其他人指出的MVC概念的View部分。
实现模板引擎的方法有很多,还有更多可以使用的方法。