Strongly-typed T4MVC Action/ActionLink

Strongly-typed T4MVC Action/ActionLink

问题描述:

我一直在使用T4MVC(FYI:v2.6.62)已经有相当长的一段时间了,我一直在慢慢地将代码转移到这种工作方式(对magic strings的依赖较少)。Strongly-typed T4MVC Action/ActionLink

但我不得不停止,因为,出于某种原因,T4MVC无法对象转化为URL和似乎只能够在基本类型(int /字符串/等)工作。

下面是一个例子:

路线击穿:

/MyController/MyAction/{Number}/{SomeText} 

类别:

namespace MyNamespace 
{ 
    public class MyClass 
    { 
    public int Number { get; set; } 
    public string SomeText { get; set; } 
    } 
} 

控制器:

public class MyController 
{ 
    public virtual ActionResult MyAction(MyClass myClass) 
    { 
    return View(); 
    } 
} 

查看:

<%= Html.Action(
    T4MVC.MyController.Actions.MyAction(
    new MyClass() 
    { 
     Number = 1, 
     SomeText = "ABC" 
    } 
) %> 

最终的结果是这样的:

/MyController/MyAction?myClass=MyNamespace.MyClass 

,而不是

/MyController/MyAction/1/ABC 

没有任何人有这个问题? T4MVC的网址是否可用?

还有问题在ASP.NET Forum

更新(10/11/2012):最近添加的Model Unbinders支持(请参阅doc中的第3.1节)应该涵盖很多这些情况。

原来的答复:

forum thread复制我的回答是:

嗯,我不认为这又拿出了呢。也许在大多数情况下,人们拥有采用对象的Action方法,对象的值来自发布的表单数据,而不是通过URL传递?在这种情况下,问题不会出现。

我想理论上T4MVC可以改变来支持这个。它只需要将所有对象的*属性提升为路由值,而不是试图使用对象本身(显然,当前行为是假的,并且是仅仅盲目地调用ToString()的结果)。

有其他人碰到这一点,认为这是值得解决?

+1

嗨大卫。谢谢回复。我猜测,鉴于在短时间内有5次上调意味着这意味着这可能是理想的功能。 :-) – 2010-03-04 20:39:08

+0

好的,我会把它放在TODO清单上! :) – 2010-03-04 21:15:19

+0

谢谢!我会发现它特别有用,因为我创建了一些ActionResults,比如使用T4MVC风格动作的PermanentRedirectResult,这种功能将非常棒,不仅仅适用于视图! – 2010-03-05 09:00:06

如果我理解正确的问题,那么下面的语法应该让你解决这个问题。

<%= Html.ActionLink("test", MVC.MyController.MyAction().AddRouteValues(new MyClass() { Number = 5, SomeText = "Hello" })) %> 

我想答案,使语法更好的将包裹每个非值类型参数的RouteValueDictionary于各所产生的行动结果的方法,

编辑:(回应评论,因为没有足够的字符)

好吧我设法重新使用此方法的上面的简单示例给:/MyController/MyAction/5/Hello作为URL。 我不太清楚嵌套复杂类型在实践中会如何泛化。您可以使用某种递归方式深入到顶层对象中,并反映这些值以添加它们,但是随后您会打开一组新的问题,例如如何处理与父级相同的子属性名称属性名称。 这似乎可能是一个复杂的问题来解决,以一种适用于每个人的方式。 也许某种适配器模式对于将复杂对象转换为路由值非常有用。在最简单的情况下,这可能是声明一个扩展方法ToRouteDictionary,它作用于复杂类型,并使用您应该如何工作的知识来转换它。只是想大声,因为我显然不知道你的用例

+0

恐怕这是行不通的。它返回路由值,但是它们的url没有正确地形成。 此外,如果使用这种包装非值类型的方法修复它,则需要递归执行此操作,因为您可以使用包含其他复杂类型的复杂类型... – 2010-03-09 10:10:41

+0

为响应上述注释而编辑 – PabloBlamirez 2010-03-09 11:44:11