我正在做一个基于插件的架构。这是一种社交网站。对于用户,我可以有图片,博客,视频。但它们都来自模块。所以,当你访问用户档案时,你会看到标签,上面写着图片、视频和其他东西。我有一个接口
public interface IUserContent
{
UserContent GetContent(long id);
}
public class UserContent
{
public int Count {get;set;}
public string URL {get;set;
public string Text {get;set;
}
如果一个照片模块实现了IUserContent它看起来像这样
public class UserPhotos : IUserContent
{
public UserContent GetContent(long id)
{
return new UserContent {
Count = SomeRepository.GetPhotosCountByUser(id),
URL = string.format("/photos/byuser/{0}",id) ,
Text ="Photos" };
}
}
这个URL是Photos Controller中的一个动作方法。
在我的个人资料页我得到IUserContent的所有实现
var list = GetAllOf(IUserContent);
,并使用foreach循环将它们呈现为用户配置文件页面上的选项卡。
现在,我的问题是,有没有更好的方法来做这件事。我不想使用URL作为字符串。或者有更好的方法来实现它。
对
Parminder
可以。
将URL = string.format("/photos/byuser/{0}",id)
替换为:
URL = Url.Action("ByUser", "Photo", new { id })
如果您希望生成一个url,其中您的操作称为ByUser
并接受id
作为参数,您的控制器称为PhotoController
;或者使用:
URL = Url.RouteUrl("PhotosByUser", new { id })
如果你想从一个叫做PhotosByUser
的路由生成你的url。
: -
- http://msdn.microsoft.com/en-us/library/dd460348.aspx;
- http://msdn.microsoft.com/en-us/library/dd505215.aspx
更多信息:)