我执行了以下操作:
public ActionResult GetCityObjects(string cityAlias)出于某些原因,我添加了一个自定义ModelBinder:
public ActionResult GetCityObjects(City city)现在,当我将城市参数传递给适当的T4MVC方法时,我想让T4MVC添加值为city.Alias的"cityAlias“参数。有没有办法做到这一点?
发布于 2012-08-20 14:30:12
现在可以使用T4MVC模型解绑器功能(http://t4mvc.codeplex.com/documentation 3.1),您可以为City类型实现自定义解绑器,如下所示:
public class CityUnbinder : IModelUnbinder<City>
{
public void UnbindModel(RouteValueDictionary routeValueDictionary, string routeName, City city)
{
if (user != null)
routeValueDictionary.Add("cityAlias", city.Alias);
}
}然后(从Application_Start)在T4MVC中注册它:
ModelUnbinderHelpers.ModelUnbinders.Add(new CityUnbinder());在此之后,您可以正常使用MVC.Home.GetCityObjects(城市)来生成urls。
发布于 2012-02-15 16:47:46
我不这样认为。
您需要使用无参数版本并手动添加路由值:
GetCityObjects().AddRouteValue("cityAlias", city.cityAlias)如果你看一下源代码,你会发现生成的方法只是使用参数名‘city’添加了城市实例。
发布于 2012-02-15 18:48:38
我已经找到了一种解决方法。我已经将以下代码硬编码为T4MVC:
<#foreach (var method in controller.ActionMethods) { #>
public override <#=method.ReturnTypeFullName #> <#=method.Name #>(<#method.WriteFormalParameters(true); #>) {
var callInfo = new T4MVC_<#=method.ReturnType #>(Area, Name, ActionNames.<#=method.ActionName #>);
<#if (method.Parameters.Count > 0) { #>
<#foreach (var p in method.Parameters) { #>
<# if (p.Name != "city") { #>
callInfo.RouteValueDictionary.Add(<#=p.RouteNameExpression #>, <#=p.Name #>);
<# } #>
<# else #>
<# { #>
callInfo.RouteValueDictionary.Add("cityAlias", city.Alias);
<# } #>
<#} #>
<#}#>
return callInfo;
}我不能说我喜欢它,但至少它在我的情况下是有效的。
大卫,你觉得在T4MVC中引入一个更通用的实现怎么样?
https://stackoverflow.com/questions/9290202
复制相似问题