2011-05-04 31 views
0

我已经创建了一个Model类让我们说产品。我想要一个属性'ItemName'每次将其放入HTML文档时都会返回一个HTML链接。例如:asp.net HTML Encode属性值

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;} 
} 

现在,只要在ITEMNAME是一个HTML文档中使用,该值是为纽带,以产品/详细信息页面,查看项目输出。这将允许在许多不同位置输出ItemName,并保证它始终是它在网站上引用的任何地方的链接。

+0

你可以返回ITEMNAME作为一个自定义类型和使用模板来呈现为一个HyperL墨水?这将有助于保持您的视图(HTML)与模型和视图模型分离。 – tomasmcguinness 2011-05-04 15:25:58

+0

这个想法是为了避免编码在每个模板可能使用的地方。我希望有一个属性在作为强类型模型访问时会返回任何视图的值。 – Neal 2011-05-04 15:36:57

回答

1

你可以在你的Product类叫做ItemAsLink,返回HTML格式的链接的价值实现与一个只有get访问一个单独的成员变量。在遇到这种情况时,我通常会这样做。它具有将一些UI /视图/显示代码移入模型的缺点,但正如您所说,它有助于代码重用。

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

1

我建议将其添加为扩展方法类,让您的视图代码模型分开的,就像这样:

​​

然后在您的视图中使用这样的:

@Html.ProductLink(product) 

这将产生类似:

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

谢谢,虽然这个想法是有一些属性,所以当构建视图时,没有必要指定引用值时的链接。这将有助于链接到整个网站的项目consitant。 – Neal 2011-05-12 17:16:53