我创建了一个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,并确保它始终是网站上引用的任何位置的链接。
答案 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>