我一直在阅读亲ASP.NET MVC 2.0框架,我有点困惑,我应该用我的验证,它应该去,以及如何确保我不必继续编写相同的代码。验证和Asp.net Mvc 2.0的最佳实践?
我的网站倾向于几乎所有与jQuery的ajax。所以我通常做的是为我的客户端提供jquery.validate,然后在服务器端再次进行一些检查。如果它会在服务器端失败,或者如果我有一个验证规则,我不能在客户端测试,那么我会返回错误消息。
一些事情用这种方式吸吮。首先,我必须确保客户端和服务器端的错误消息相同。所以我会一直有2个重复的消息。
所以,如果我拼错了一个词,我必须确保我记得在2个地方改变它。其次,很难返回服务器端的错误(我的网站大部分几乎都是ajax),所以我做的是我总是要检查一个标志。
$.post('Create',{'test',test},function(response)
{
if(response.IsValid == false)
{
// check other json parameters to get all error msgs
// add them to some div container and display to user.
}
else
{
// show success msg.
}
}):
我在查看数据注释,但我不确定他们是否会帮助我,因为我使用的是ajax帖子。
如果您点击一个连接到ajax文章的按钮,客户端代码是否仍然显示?
我也猜测服务器端的邮件永远不会显示的,因为它不依赖于寻找那些需要一个完整的页面呈现HTML验证辅助?
我也发现它们非常有限。我知道你可以编写你自己的,但似乎很多写(服务器端和客户端代码),特别是因为我将不得不写基本上jQuery验证提供的一切。
是否有更新的活动,允许您使用jquery.validate(包括远程,jquery.validate)数据注释的库吗?
最后我不知道这段代码应该放在哪里。这本书的作者让我感到困惑。
他
public class Appointment
{
[Required(ErrorMessage = "Please enter your name")] [StringLength(50)]
public string ClientName { get; set; }
[DataType(DataType.Date)] [Required(ErrorMessage = "Please choose a date")]
public DateTime AppointmentDate { get; set; }
}
他在什么似乎是一个教职员模型基本验证。我明白这一点,但什么困惑我是那么一个服务类,他再次做基本的验证和业务验证。
namespace BookingsExample.Domain.Services
{
public class AppointmentService
{
public static void CreateAppointment(Appointment appt)
{
EnsureValidForCreation(appt);
// To do: Now save the appointment to a database or wherever
}
private static void EnsureValidForCreation(Appointment appt)
{
var errors = new RulesException<Appointment>();
if (string.IsNullOrEmpty(appt.ClientName))
errors.ErrorFor(x => x.ClientName, "Please specify a name");
if (appt.AppointmentDate < DateTime.Now.Date)
errors.ErrorFor(x => x.AppointmentDate, "Can't book in the past");
else if ((appt.AppointmentDate - DateTime.Now.Date).TotalDays > 7)
errors.ErrorFor(x => x.AppointmentDate, "Can't book more than a week in advance");
if (appt.ClientName == "Steve" && appt.AppointmentDate.DayOfWeek == DayOfWeek.Saturday)
errors.ErrorForModel("Steve can't book on weekends");
if (errors.Errors.Any())
throw errors;
}
}
}
仅仅因为你的模型层强制 它自己的规则,并不意味着你使用ASP.NET MVC的内置 验证支持有 停止。我发现它有帮助 认为ASP.NET MVC的验证 机制作为有用的第一行 防御特别擅长 生成客户端验证 脚本几乎没有工作。它在适合 整齐地与所述视图模型图案 (即,具有简单视图特定 模型只存在于控制器和视图和 之间传输 数据不持有业务逻辑):每个视图 模型类可以使用数据注释 属性来配置客户端 验证。
但是,您的域层不应该 信任您的UI层强制执行 业务规则。真正的执法 代码必须进入使用 一些技术,就像你刚才 看到的一个领域。 *
- 这是从亲asp.net的MVC 2.0框架书第12章
我能理解那种,他为什么会这样,他可以采取的服务层,并用它在不同的项目(即你有一些移动应用程序的网站,你需要使用相同的业务逻辑)。
但是它看起来有点多余,他是在两个地方写一些相同的消息,现在他已经在2个地方,以更新的消息。我也不确定他为什么不信任“UI”来进行验证,因为它正在服务器端进行测试,并且应该是安全的。
所以那会不会只是更好地拥有这一切在服务层呢?或者,在视图模型中保留简单的必需字段以进行验证会更好吗?
的控制器级验证确实是多余的,(IMO)完全愚蠢的。 – Sapph 2011-01-11 01:20:50