【问题标题】:the best way to handle最好的处理方式
【发布时间】:2015-08-03 14:18:36
【问题描述】:
我正在编写一个模块(前端 extjs 4.2.1,后端 asp.net mvc 与 EF)。我遇到一个小问题:
当用户单击搜索按钮时,将显示一个 extjs 面板,他/她可以在文本字段内填充一些空白。过滤信息提交后,服务器端会使用适当的c#代码来处理过滤mssql数据库中的一些记录,这是我的问题:
如果用户在字段中没有插入任何内容,标准和最佳实践将是忽略此字段,但是,空白文本字段的值将是 '' 我不能将其用作过滤器字符串,例如:
有一个名为“sex”的文本字段,如果用户在该字段中没有输入任何内容,则传递给服务器的值将是 '',如果我以这种方式编写 lambda 表达式:
var filter = x=>x.sex =="";显然它不会起作用。你可能会说我可以使用 if-else 来排除这些东西。但是如果我有很多领域,使用 if-else 真的很浪费时间。
那么,这样做的最佳做法是什么
【问题讨论】:
标签:
asp.net
sql-server
extjs
web
linq-to-sql
【解决方案1】:
这个条件有很多种写法,但是你说的是一个条件,所以为它写代码并不是真的“浪费时间”。
例如,如果你有一个IEnumerable<T> 并且你想过滤它,你可以这样做:
if (string.IsNullOrWhitespace(someFieldValue))
result = result.Where(x => x.SomeField.Equals(someFieldValue));
或者,如果您正在构建表达式,您可以有条件地定义表达式。可能看起来像这样(这完全是徒手画的,所以我不确定它会像这样工作,但你明白了):
var filter = string.IsNullOrWhitespace(someFieldValue) ?
x => true :
x => x.SomeField.Equals(someFieldValue);
您可以在一些私有辅助方法后面抽象它,以便使用代码更清洁,您可以重构常用过滤器以减少重复等。但归根结底,您的代码表达的逻辑是:
在特定的已知状态下,做一件事。在其他州,请改用其他方式。
这是一个条件语句。
【解决方案2】:
在请求提交到服务器之前,可以在客户端阻止它。
在服务器端,您可以从服务层抽象验证部分。
在我的典型 Spring MVC 应用程序中 -
1.请求转到控制器。
2.Controller 委托给 Validator。
3.如果成功,控制器委托给服务层。
4.如果失败,控制器将用户重定向到错误页面。