内联模板,将HTML作为字符串分配给模型属性

时间:2010-01-23 16:37:45

标签: asp.net-mvc

ASP.NET MVC(2)中有没有办法做类似的事情:

<table>
    <tr>
        <% Model.Pager.TemplateNextPage = { %>
            <li><a href={link-next-page}>Next</a></li>
        <% } %>
        <% Model.Pager.TemplatePageNumber = { %>
            <li><a href={link-page-number}>{number}</a></li>
        <% } %>
        <% Model.Pager.TemplatePageNumberActive = { %>
            <li>{number}</li>
        <% } %>
    </tr>
</table>

一般的想法是让设计师能够指定模板。

1 个答案:

答案 0 :(得分:1)

不喜欢那样。 “%&gt;”之间的代码和“&lt;%”,例如。

<% Model.Pager.TemplateNextPage = { %>
  <li><a href={link-next-page}>Next</a></li>
<% } %>

...将翻译为......

Model.Pager.TemplateNextPage = {;
Response.Write("<li><a href={link-next-page}>Next</a></li>");
};

编译时(忽略示例中的空格)。所以它并没有真正起作用。

然而,您可以使用Asp.Net WebForms控件并创建自定义控件。它将在Asp.Net MVC页面中工作。并非所有功能都有效(例如与表单回发相关),但足以满足您的需求。

E.g。表格控件是这样的:

<asp:Table runat="server">
    <asp:TableFooterRow>
        <asp:TableCell>foo</asp:TableCell>
        <asp:TableCell>faa</asp:TableCell>
    </asp:TableFooterRow>
</asp:Table>

您可以扩展它 - 或者从头开始创建一个控件,允许您创建自己的TemplateNextPage等。

...但这不是Asp.Net MVC的方式 - 它是旧的Asp.Net WebForms方式。它只适用于Asp.Net MVC页面。

你拥有的另一个选择是创建自己的模板引擎,但这是相当多的工作,我认为intellisense部分对你来说非常重要,所以它也会搞砸。