Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Orchard:自定义注册字段_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Orchardcms - Fatal编程技术网

Asp.net Orchard:自定义注册字段

Asp.net Orchard:自定义注册字段,asp.net,asp.net-mvc,asp.net-mvc-3,orchardcms,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Orchardcms,对于我的Orchard项目,我需要用户在注册时提供一些附加信息。(比如,名字、姓氏、裤子颜色)。此信息必须在注册时输入,不能推迟到以后(根据客户订单) 我尝试使用配置文件和扩展注册插件来请求这些,但据我所见,这只给了我在注册表单中显示的可选字段。有没有一种方法可以显示必填字段 根据,我还快速尝试了覆盖AccountController的Register方法,但我无法让它工作:控制器位于不同的位置,它不能被子类化,即使我强制它,代码也永远不会执行。我猜他们使用的是一种更古老的果园 那么,我应该朝哪

对于我的Orchard项目,我需要用户在注册时提供一些附加信息。(比如,名字、姓氏、裤子颜色)。此信息必须在注册时输入,不能推迟到以后(根据客户订单)

我尝试使用配置文件和扩展注册插件来请求这些,但据我所见,这只给了我在注册表单中显示的可选字段。有没有一种方法可以显示必填字段

根据,我还快速尝试了覆盖AccountController的
Register
方法,但我无法让它工作:控制器位于不同的位置,它不能被子类化,即使我强制它,代码也永远不会执行。我猜他们使用的是一种更古老的果园


那么,我应该朝哪个方向创建一个接近果园哲学的强制性字段呢?我是否应该创建一个拒绝空值的新字段类型?(这可能吗)

虽然这可能无法回答您的问题,但我只想指出,我的理解是,您不需要重写AccountController类或将其子类化。相反,您需要通过添加您自己的具有更高优先级的路由来“覆盖”用户/帐户/注册路径。为此,您需要实现一个
IRouteProvider
,作为我们模块的一部分。因为它是一个独立的特性,所以它将在运行时自动加载和处理。比如:

public class Routes : IRouteProvider
{
    public void GetRoutes(ICollection<RouteDescriptor> routes)
    {
        routes.AddRange(GetRoutes());
    }

    public IEnumerable<RouteDescriptor> GetRoutes()
    {
        return new[] {
            new RouteDescriptor {
                // Make sure to be higher than the default
                Priority = ##### PRIORITY HERE (int) ######,
                Route = new Route(
                "Users/Account/Register",
                new RouteValueDictionary {
                    {"area", "#### YOUR MODULE AREA HERE ####"},
                    {"controller", "#### YOUR ACCOUNT CONTROLLER HERE ####"},
                    {"action", "#### YOUR REGISTER ACTION HERE ####"}
                },
                new RouteValueDictionary(),
                new RouteValueDictionary {
                    {"area", "#### YOUR MODULE AREA HERE ####"}
                },
                new MvcRouteHandler())
            }
        };
    }
}
公共类路由:IRouteProvider
{
公共路线(ICollection路线)
{
routes.AddRange(GetRoutes());
}
公共IEnumerable GetRoutes()
{
返回新的[]{
新路由描述符{
//确保高于默认值
优先级=#################,
路线=新路线(
“用户/帐户/注册”,
新RouteValueDictionary{
{“区域”、“#############”},
{“controller”、“#############”},
{“action”、“##############”}
},
新建RouteValueDictionary(),
新RouteValueDictionary{
{“区域”、“#############”}
},
新的MvcRouteHandler())
}
};
}
}

出于同样的需要,我编写了ExtendedRegistration模块。 您需要创建自定义零件,例如:MyRegistrationPart。 然后将该部分添加到用户ContentType。 在您的部分中,只需将[Required]属性(数据注释)添加到任何必需的属性。 在填写这些强制值之前,注册不会成功


希望现在一切都清楚了。

我可以补充一点,尝试实际重写控制器方法是一件非常麻烦的事情,可能不值得这么做。今天我学到了…谢谢伊万!我使用此方法“覆盖”到Users/Account/AccessDenied的路由,这样我就可以自己处理登录页面的呈现。另外,看起来Orchard 1.4使用路径OrchardLocal/Users/Account/LogOn来处理实际登录。谢谢,这就是我最后要做的。哦,非常感谢你编写了这个模块。