我正在编写一个模块(frontend extjs 4.2.1,后端asp.net mvc和EF)。我遇到一个小问题: 当用户单击搜索按钮时,将显示一个extjs面板,他/她可以填充文本字段内的一些空白。提交过滤器信息后,服务器端将使用适当的c#代码来处理它来过滤mssql数据库中的一些记录,这是我的问题:
如果用户没有在字段中插入任何内容,标准和最佳实践将是该字段将被忽略,但是,空白文本字段的值将是''我不能将其用作过滤字符串,例如: 有一个名为“sex”的文本字段,如果在字段中没有输入任何内容,传递给服务器的值将为'',如果我以这种方式写lambda表达式: var filter = x => x.sex ==“”;显然它不会起作用。你可能会说我可以使用if-else来调整这些东西。但如果我有很多领域,使用if-else将真的浪费时间。 那么,这样做的最佳做法是什么
答案 0 :(得分:2)
有很多方法可以写出这个条件,但你所说的是条件,所以它并不是真的"浪费时间"为它编写代码。
例如,如果你有一个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);
您可以在一些私有帮助器方法后面抽象这一点,以便消耗代码更清晰,您可以重构常用的过滤器以减少重复等。但是在一天结束时,您的代码所表达的逻辑是:< / p>
在特定的已知状态下,做一件事。在其他州,改为做别的事。
这是条件陈述。
答案 1 :(得分:0)
在提交给服务器的请求之前,可以在客户端阻止它。
在服务器端,您可以从服务层抽象验证部分。
在我的典型Spring MVC应用程序中 -
1.请求转到控制器
2.Controller委托给Validator。
3.如果成功,控制器委托服务层
4.如果失败,控制器会将用户重定向到错误页面。