我正在写使用ASP.NET MVC与JSON.NET作为服务器,发送JSON到由读取客户端的应用程序淘汰赛,然后显示数据绑定。这一切都工作奇妙,除了一个问题:添加ASP.NET MVC路由的网址,查看模型对象(在JSON使用)
我有一个类Customer
这是用来生成一个ReviewAuthorViewModel
类 - 后者专门用于JSON序列化,并删除不必要的字段,循环引用等。在客户端,我想呈现一个链接到客户的个人资料页面,URL来自定义的MVC路由“user/{username}”。因为我是通过JSON发送的,所以我没有.cshtml
页面,我可以在其中拨打Url.Action
。
现在的问题是:对于一个任意的对象,我怎样才能最有效地/优雅地获得一个数据行为的URL,没有.cshtml视图?
我宁愿不要求每个动作额外的代码的解决方案,但可能是除了在JavaScript中重新创建路由表中的客户端的唯一选择。以下是我已经尝试过的事情,以及每个事情都不令人满意。
解尝试1
调用UrlHelper.Action
方法在ReviewAuthorViewModel
类。但是,UrlHelper
需要请求上下文。为了分离问题,我不希望我的视图模型对System.Web.Routing
有依赖性,也不希望它需要请求上下文来运行。
解尝试2
创建类RouteInformation
与成员控制器,动作,和数据,并与两个属性的接口IUrlViewModel
,RouteInformation
类型和命名Url
一个获取/设置字符串的一个get。需要链接的视图模型然后实现此界面,并且控制器查找IUrlViewModel
类型的视图模型,并使用来自视图模型的RouteInformation
实例的信息运行UrlHelper.Action
,将结果存储在Url属性中。
这一个作品但没有反射我不知道如何找到在其他视图模型中实现IUrlViewModel
视图模型,它感觉非常kludgy。
你有什么建议有基本上是我做的解决方案2,抽象为一个接口,使之更容易被重用。但是,这使得很难获得应该添加URL的嵌套视图模型对象,并且必须将其添加到每个动作,这似乎是引入难以捉摸的错误的好方法。 – ehdv 2012-02-23 17:07:19
我觉得第二个解决方案太复杂,过度设计。 – archil 2012-02-23 17:14:20