asp.net HTML编码属性值

时间:2011-05-04 15:21:27

标签: asp.net asp.net-mvc

我创建了一个Model类,比如说Products。我希望每次将属性'ItemName'放入HTML文档时都返回一个HTML链接。例如:

public class Product
{
    int ItemID {get; private set;}
    [HtmlReturn(Link=Html.ActionLink("Products", "Details", new {id=ItemID})] // <-- Something like this
    int ItemName {get; private set;}
    int Price {get; private set;}
}

现在,只要在HTML文档中使用ItemName,该值就会作为指向该项目的“产品/详细信息”页面的链接输出。这将允许在许多不同的位置输出ItemName,并确保它始终是网站上引用的任何位置的链接。

2 个答案:

答案 0 :(得分:1)

您可以在名为Product的{​​{1}}类中使用get-only访问器实现一个单独的成员变量,该类返回HTML格式的链接值。这是我在遇到这种情况时通常会做的事情。它的缺点是将一些UI /视图/显示代码移动到模型中,但正如您所说,它有助于代码重用。

您建议的方式做同样的事情(将应该在视图中的代码移动到模型中)。在我看来,它也会让人感到困惑,因为ItemAsLink根据它的调用方式会有不同的值。这违反了ItemName始终相同的期望,无论其使用方式如何。

答案 1 :(得分:1)

我建议将其作为扩展方法添加到您的班级,以使您的视图代码与您的模型分开,如下所示:

public static class ProductHelper
{
   public static MvcHtmlString ProductLink(this HtmlHelper html, Product product)
   {
       return html.ActionLink(product.ItemName, "Details", "Product", new { id = product.Id });
   }
}

然后在你的视图中使用:

@Html.ProductLink(product)

会产生类似的结果:

<a href="/products/details/1">Product 1's item name</a>