- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在阅读 pro 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 validate 提供的所有内容。
是否有事件更新的库允许您将数据注释与 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;
}
}
}
Just because your model layer enforces its own rules doesn't mean you have to stop using ASP.NET MVC's built-in validation support. I find it helpful to think of ASP.NET MVC's validation mechanism as a useful first line of defense that is especially good at generating a client-side validation script with virtually no work. It fits in neatly with the view model pattern (i.e., having simple view-specific models that exist only to transfer data between controllers and views and do not hold business logic): each view model class can use Data Annotations attributes to configure client-side validation.
But still, your domain layer shouldn't trust your UI layer to enforce business rules. The real enforcement code has to go into the domain using some technique like the one you've just seen. *
我能理解他为什么这样做,这样他就可以获取服务层并将其用于不同的项目(即您的网站有一些移动应用程序,您需要使用相同的业务逻辑)。
然而,他在 2 个地方写了一些相同的消息,现在他必须在 2 个地方更新消息,这看起来有点多余。我也不确定为什么他不信任“UI”来进行验证,因为它正在服务器端进行测试并且应该是安全的。
那么将它全部放在服务层中不是更好吗?还是在 View 模型中保留简单的必填字段以进行验证更好?
最佳答案
数据注释是在服务器上验证对象的最佳解决方案。您可以在代码隐藏/ Controller 、服务层或数据访问层中验证它们。
不幸的是,没有现成的解决方案来集成数据注释和 jquery.validate,因此您将不得不在客户端脚本中使用一些自定义验证代码。如果您想进行集中验证,那么您可以对验证服务 (json) 进行 ajax 调用,该服务将通过数据注释在服务器上验证您的 Appointment 对象,并将 json 结果返回给客户端。响应可以是简单的 bool 值,也可以是可用于构建 UI 显示的更复杂的对象。
关于c# - 验证和 Asp.net Mvc 2.0 的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4653210/
本文分享自华为云社区《大模型LLM之分布式训练》,作者: 码上开花_Lancer。 随着语言模型参数量和所需训练数据量的急速增长,单个机器上有限的资源已无法满足大语言模型训练的要求。需要设计分布式训
本文分享自华为云社区《五大基础算法--动态规划法》,作者: 大金(内蒙的)。 一、基本概念 动态规划法,和分治法极其相似。区别就是,在求解子问题时,会保存该子问题的解,后面的子问题求解时,可以直接拿来
pip install scp pip install pexpect 测试代码: import os import stat import paramiko # 用于调用scp命令 def s
我目前正在实现“ token ”REST 服务。 token 只是一个字符串,由一些参数构建而成,然后经过哈希处理并在一定时间后过期。 我想在我的 REST 服务中有一个可以验证 token 的端点,
打开软删除后,我在客户端上添加一条记录,推送,删除添加的记录推送,然后尝试使用与初始记录相同的主键添加新记录(然后推送),我得到一个异常(exception)。 EntityDomainManager
打开软删除后,我在客户端上添加一条记录,推送,删除添加的记录推送,然后尝试使用与初始记录相同的主键添加新记录(然后推送),我得到一个异常(exception)。 EntityDomainManager
我有一个应用程序,每 x 秒接收一次天气信息。我想将此数据保存到 XML 文件中。 我应该为每个天气通知创建一个新的 XML 文件,还是将每个通知附加到同一个 XML 文件中?我不确定 XML 标准的
我猜我们大多数人都必须在某个时候处理这个问题,所以我想我会问这个问题。 当您的 BLL 中有很多集合并且您发现自己一遍又一遍地编写相同的旧内联(匿名)谓词时,显然有必要进行封装,但实现封装的最佳方
我有一些 c# 代码已经运行了一段时间了..我不得不说,虽然我了解 OO 原则的基础知识,但显然有不止一种方法可以给猫剥皮(尽管我讨厌那个短语!)。 因此,我有一个基本抽象类作为基本数据服务类,如下所
我设计了一个 SQL 数据库系统(使用 Postgre),我有一个问题,即创建一个关系/引用的常见做法是什么,这种关系/引用即使在引用的对象被删除时也能持续存在。 比如有一个UserORM,还有Act
我们的目标是搜索用户输入的字符串并计算在其中找到多少元音。不幸的是我被困在这里,有什么帮助吗? def numVowels(s): vowels= "AEIOUaeiou" if s
我有一个适用于我的“items”int 数组的旋转函数。下面的代码完成了它,除了我不必要地传输值。我正在努力实现“就地”轮换。我的意思是 ptrs 会递增或递减,而不是从数组中获取值。我需要通过这种方
我有一个 json 存储在我的应用程序文档文件夹中,我需要在我的所有 View 中使用它。我正在加载 json 并将其添加到每个 View 中的 NSMutableArray。但现在我了解到,我可以将
我用 C++ 开始了一个项目。这种语言的内存管理对我来说是新的。 我过去常常使用 new () 创建对象,然后传递指针,虽然它可以工作,但调试起来很痛苦,人们看到代码时会用有趣的眼神看着我。我为它没有
已结束。 这个问题是 off-topic .它目前不接受答案。 想要改进这个问题? Update the question所以它是on-topic堆栈溢出。 关闭 10 年前。 Improve thi
保持类松散耦合是编写易于理解、修改和调试的代码的一个重要方面——我明白这一点。然而,作为一个新手,几乎任何时候我都会超越我所苦苦挣扎的最简单的例子。 我或多或少地了解如何将字符串、整数和简单数据类型封
我发现我需要编写大量重复代码,因为我无法从其他 Controller 调用函数。例如,这里新闻提要内容在我的代码中重复,我对一个 Controller 做一些特定的事情,然后需要像这样加载我的新闻提要
假设需要一种数字数据类型,其允许值在指定范围内。更具体地说,假设要定义一个整数类型,其最小值为0,最大值为5000。这种情况在很多情况下都会出现,例如在对数据库数据类型,XSD数据类型进行建模时。 在
假设我想循环整个数组来访问每个元素。使用 for 循环、for...in 循环或 for...of 循环是 JavaScript 开发人员的标准做法吗? 例如: var myArray = ["app
我有一个旧的 SL4/ria 应用程序,我希望用 Breeze 取代它。我有一个关于内存使用和缓存的问题。我的应用程序加载工作列表(一个典型的用户可以访问大约 1,000 个这些工作)。此外,还有很多
我是一名优秀的程序员,十分优秀!