我有以下操作:T4MVC ModelBinding
public ActionResult GetCityObjects(string cityAlias)
通過一些原因,我添加了一個自定義的模型綁定器:
public ActionResult GetCityObjects(City city)
現在我想讓T4MVC添加 「cityAlias」 參數值爲city.Alias當我將城市參數傳遞給適當的T4MVC方法時。有什麼辦法可以實現它嗎?
我有以下操作:T4MVC ModelBinding
public ActionResult GetCityObjects(string cityAlias)
通過一些原因,我添加了一個自定義的模型綁定器:
public ActionResult GetCityObjects(City city)
現在我想讓T4MVC添加 「cityAlias」 參數值爲city.Alias當我將城市參數傳遞給適當的T4MVC方法時。有什麼辦法可以實現它嗎?
現在已經可以用T4MVC型號Unbinder功能(http://t4mvc.codeplex.com/documentation 3.1),可以實現自定義unbinder爲City
類型這樣的:
public class CityUnbinder : IModelUnbinder<City>
{
public void UnbindModel(RouteValueDictionary routeValueDictionary, string routeName, City city)
{
if (user != null)
routeValueDictionary.Add("cityAlias", city.Alias);
}
}
,然後在它註冊T4MVC(來自的Application_Start):
ModelUnbinderHelpers.ModelUnbinders.Add(new CityUnbinder());
之後就可以正常使用產生的URL MVC.Home.GetCityObjects(市)。
我不這麼認爲。
您需要使用無參數的版本和手動添加路徑值:
GetCityObjects().AddRouteValue("cityAlias", city.cityAlias)
如果你看一下源代碼,你會看到生成的方法,只是增加了使用的參數名稱「城市」 city
實例。
我找到了解決方法。我已經硬編碼到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;
}
我不能說我喜歡它,但至少它適用於我的情況。 David,你認爲如何在T4MVC中引入更一般的實現?
原則上聽起來不錯!只需要找到有時間來處理這個問題的貢獻者,不幸的是我只有有限的資源來使用T4MVC。儘管我試圖快速修復明顯修復的錯誤。 – 2012-02-17 00:01:05
@DavidEbbo,我希望我能找到一些時間來實現它,但首先我想討論要實現的內容。將相似的案例進行概括並找出涵蓋這些案例的最佳方法是非常好的 – SiberianGuy 2012-02-17 05:16:13