[英]How can I get implicit type conversions from string members of anonymous types to strongly-typed controller actions?
我的 model 中有以下内容:
public sealed class OAuthProvider
{
private readonly string name;
private const string SOME_PROVIDER = "SOMEPROVIDER";
public static readonly OAuthProvider SomeProvider = new OAuthProvider(SOME_PROVIDER);
private OAuthProvider(String name) { this.name = name; }
public override String ToString(){ return name; }
public static implicit operator string(OAuthProvider oAuthProvider)
{
return oAuthProvider.name;
}
public static implicit operator OAuthProvider(string oAuthProvider)
{
switch (oAuthProvider)
{
case SOME_PROVIDER : return SomeProvider ;
default: return null;
}
}
}
这在我的OAuth
controller 中:
public ActionResult Profile(OAuthProvider network)
{...}
这在我看来:
@model SomeModel
Html.RenderAction("Profile", "OAuth", new { network = Model.Network });
其中Model.Network
是一个string
呈现此视图时,我可以看到(通过断点) Model.Network
作为不是 null 的string
传入。正在调用我的Profile(OAuthProvider)
,但network
作为null
,尽管隐式类型转换正在进行到位。
我会以错误的方式解决这个问题吗? 我是否被迫进行显式转换?
不确定这是否可行,这不是对您所拥有内容的直接回答(但在类似情况下很难说没有调试)但可能会有所帮助(并且评论的文字很多)......
在类似的情况下,当绑定不能按预期工作时,通常有助于调试 - 通过制作自定义活页夹。
在你的Application_Start
你做这样的事情......
ModelBinders.Binders.Add(typeof(YourNamespace.OAuthProvider), new YourNamespace.Binders.OAuthProviderClassBinder());
(如果 controller 永远不会到达操作或其他情况,例如ControllerBuilder.Current.SetControllerFactory(new RedirectControllerFactory());
其中工厂派生自DefaultControllerFactory
,类似于以下示例)
...然后在代码中的某处定义活页夹,简化...
public class OAuthProviderClassBinder : DefaultModelBinder
{
//public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
//{
//}
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
var model = (OAuthProvider)base.CreateModel(controllerContext, bindingContext, modelType);
// ...you change, inspect set etc.
return model;
}
}
...这是自定义绑定的方式,调整您的“传递”值 - 还检查它们是否有问题等。
而且您最好覆盖其他方法,例如BindModel
这里有一个链接快速...
创建自定义 model 活页夹
http://msdn.microsoft.com/en-us/library/system.web.mvc.defaultmodelbinder.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.