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