如何在Umbraco6.0中实现MVC的远程验证
本文关键字:程验证 验证 MVC Umbraco6 实现 | 更新日期: 2023-09-27 18:22:37
内容项url为http://www.mysite.com/us/signup其给出如下所述的错误,
错误消息No url for remote validation could be found.
验证属性在模型中的属性上是
[Remote("IsStoreExists", "Stores", AdditionalFields = "StoreId", ErrorMessageResourceName = "StoreAlreadyExists", ErrorMessageResourceType = typeof(Resources.Stores._CreateOrEdit))]
public string StoreName { get; set; }
我已经尝试了这里提到的mvcbridge的调整——使用mvcbridge通过URL在控制器上调用操作(不是包,而是关于为控制器添加新路由的想法)。请注意,我已经将此Umbraco 6.0应用程序中的HttpApplication
重写为public class MvcApplication : UmbracoApplication
,它调用RouteConfig类,如下所示。。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteTable.Routes.MapRoute(
"Stores", // Route name call it anything you want
"Stores/{action}/{id}", // URL with parameters,
new { controller = "Stores", action = "IsStoreExists", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
当我注释掉名为Stores
的自定义路由时,由于Umbraco中View
中的blank Template,出现了空白页面,但当我取消注释路由Stores
时,url处显示404http://www.mysite.com/us/stores/
请帮忙。
可能只是我,但您配置的路由与您使用的URL不同。您的URL以/us/
开头,但这是路由中缺少的部分路径,因此会抛出404。
您可以将您的路线更改为"我们/商店/{action}/{id}",看看这是否有效。
[Remote("IsStoreExists", "StoresSurface", AdditionalFields = "StoreId", HttpMethod = "POST", ErrorMessageResourceName = "StoreAlreadyExists", ErrorMessageResourceType = typeof(Resources.Stores._CreateOrEdit))]
public string StoreName { get; set; }
匹配的表面控制器如下所示:
using System.Web.Mvc;
using Umbraco.Web.Mvc;
/// <summary> Stores controller. </summary>
public sealed class StoresSurfaceController : SurfaceController
{
/// <summary> Does the store exist. </summary>
/// <param name="StoreName"> Name of the store. </param>
/// <param name="StoreId"> Identifier of the store. </param>
/// <returns> true if the store exists, false if not. </returns>
[HttpPost]
public JsonResult IsStoreExists(string StoreName, long StoreId)
{
return this.Json(true);
}
}
这是我经常使用的模式,应该可以解决您的问题。