首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T4MVC ModelBinding

T4MVC ModelBinding
EN

Stack Overflow用户
提问于 2012-02-15 16:44:01
回答 3查看 328关注 0票数 1

我执行了以下操作:

代码语言:javascript
复制
public ActionResult GetCityObjects(string cityAlias)

出于某些原因,我添加了一个自定义ModelBinder:

代码语言:javascript
复制
public ActionResult GetCityObjects(City city)

现在,当我将城市参数传递给适当的T4MVC方法时,我想让T4MVC添加值为city.Alias的"cityAlias“参数。有没有办法做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-20 14:30:12

现在可以使用T4MVC模型解绑器功能(http://t4mvc.codeplex.com/documentation 3.1),您可以为City类型实现自定义解绑器,如下所示:

代码语言:javascript
复制
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中注册它:

代码语言:javascript
复制
ModelUnbinderHelpers.ModelUnbinders.Add(new CityUnbinder());

在此之后,您可以正常使用MVC.Home.GetCityObjects(城市)来生成urls。

票数 3
EN

Stack Overflow用户

发布于 2012-02-15 16:47:46

我不这样认为。

您需要使用无参数版本并手动添加路由值:

代码语言:javascript
复制
GetCityObjects().AddRouteValue("cityAlias", city.cityAlias)

如果你看一下源代码,你会发现生成的方法只是使用参数名‘city’添加了城市实例。

票数 2
EN

Stack Overflow用户

发布于 2012-02-15 18:48:38

我已经找到了一种解决方法。我已经将以下代码硬编码为T4MVC:

代码语言:javascript
复制
<#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中引入一个更通用的实现怎么样?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9290202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档