【问题标题】: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.如果失败,控制器将用户重定向到错误页面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-09
        • 2013-04-01
        • 2013-11-27
        • 1970-01-01
        • 2021-02-03
        • 1970-01-01
        • 2013-04-25
        相关资源
        最近更新 更多