2010-09-15 58 views
0

我有存储在数据库中的标记,我将其放到页面上。下面的 是我所拥有的基本示例,没有任何db调用以便于举例;动态标记与MVC

控制器:

ViewData["testMarkup"] = "I was here <%= DateTime.Now.Year %>"; 

的观点:

<%= ViewData["testMarkup"] %> 

现在这一点放:我在这里 也没有日期,这是因为它是忽略了<%=% >部分,无论如何我可以输出上述的字符串,并包括年?

非常感谢,

回答

1

只需做到以下几点:

ViewData["testMarkup"] = "I was here " + DateTime.Now.Year.ToString(); 

还是我失去了一些东西?代码块,如<%= DateTime.Now.Year %>是唯一有效的,当他们的标记部分:

<div>The year is <%= DateTime.Now.Year %></div> 
+0

您的解决方案的工作,但并不需要什么,你不能把在DB中。 – JamesStuddart 2010-09-15 13:57:56

+0

你能够实现这一点的唯一方法是使用一些讨厌的字符串操作。即在您的数据库标记中包含占位符,并在呈现视图时查找并替换它们。 – GenericTypeTea 2010-09-15 14:01:25

0

在数据库中的标记被视为字符串,而不是在你看来语言代码,所以它是简单地写它作为文本,C#和所有。

两种替代方法:

1 - 使用一个模板系统,如

ViewData["testMarkup"] = "I was here #YEAR#"; 
与它们的值

,并具有用于替换您的令牌的方法(例如#YEAR#)在渲染时,例如,

<%= ReplaceTokens((string)ViewData["testMarkup"]) %> 

ReplaceTokens样子:

public static ReplaceTokens(string s) 
{ 
    return s.Replace("#YEAR#", DateTime.Now.Year) 
} 

2 - 将标记存储在局部视图中,并在必要时将局部视图的名称保存在数据库中。

+0

谢谢,我解决了这两个答案 1.我想要做的是没有一个大的查找和替换类,如在我有DateTime.Now.Year的例子,但这可能是任何代码。 2.这将工作,但我试图为一个网站的模板样式系统做到这一点,所以我可以通过管理系统编辑网站的完整标记。这可以通过使用I/O并实际编辑物理文件来完成,但我不认为这是正确的解决方案。 – JamesStuddart 2010-09-15 13:59:30