我希望automapper为视图模型生成URL.例如,这是我的数据对象:
public class User { public int Id { get; set; } public int Name { get; set; } }
视图模型看起来像这样:
public class UserListItem { public string Name { get; set; } public string EditUrl { get; set; } }
像这样的东西:
listIten.EditUrl = Url.Action("Edit","UserController",new { id = user.Id });
似乎无法让AutoMapper执行此操作.没有RequestContext,UrlHelper或任何可用于映射表达式的东西,我在调用Mapper.Map时没有找到任何传递上下文的方法.
我错过了什么吗?或者首先想要做到这一点是一个坏主意?
更新:其他背景
我正在研究为MVC视图生成URL的替代方法,目的是使ASP.NET MVC应用程序维护尽可能简单.映射视图模型时生成URL是其中一种选择.它很容易测试和清理视图.在某些情况下,它还会促进视图的可重用性.在尝试这个想法时,我遇到了一个砖墙,AutoMapper无法接受任何类型的(动态)上下文操作.
解决方法
我认为这不是AutoMapper的工作.
路由是特定于ASP.NET的,AutoMapper真的只适用于对象映射.它没有HTTP上下文的可见性(也不应该),因此无法完成.
如果你想在多个地方“重用”这个逻辑,为什么不创建一个强类型的HTML帮助器呢?
public static MvcHtmlString EditUserLinkForModel<UserListItem>(this HtmlHelper<UserListItem> htmlHelper) { var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext); return urlHelper.Action("Edit",new { id = htmlHelper.ViewData.Model.UserId }); }
视图:
@Html.EditUserLinkForModel()
虽然这甚至可能是矫枉过正的.这是1班轮!