在我的asp.net mvc中管理String的最佳方法(比较和检查存在)

时间:2013-11-01 14:33:53

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在开发一个asp.net mvc web应用程序,目前我在处理字符串时遇到一些问题,主要是因为: -

  1. 在begging和end中插入或编辑带有空格的值。

  2. 编辑字段时检查字符串唯一性。

  3. 对于第一个问题,我有以下行动方法: -

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(DataCenter dc)
    { 
    

    数据中心有一个名为“Name”的属性。现在,如果用户插入诸如“ABC”和“ABC”之类的值,它们将作为两个不同的值保存在SQL服务器上。虽然我已经在数据库上定义了一个独特的约束。因此,我找到解决此问题的最佳方法是将我的操作方法修改为如下:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(DataCenter dc)
    {
        dc.name = dc.name.trim();
        //…
    }
    

    但我最终在所有相关的动作方法和编辑&创造行动方法。

    问题1:有更好的方法来修剪字符串吗?

    第二个问题,关于我正在检查的动作方法是字符串是唯一的或不是如下,通过编写服务方法: -

    if (!repository.IsDataCenterUnique(dc.Name))
    {
        ModelState.AddModelError("Name", "Error occurred: DataCenter Name already exsists.");
    }
    

    但是,如果用户编辑对象但未更改其名称,则在编辑操作方法中使用此方法将导致错误。所以我修改了我的服务方法来传递对象id,然后我将它从比较中排除如下: -

    if (!repository.IsDataCenterUnique(dc.Name,dc.ID))
    {
        ModelState.AddModelError("Name", "Error occurred: DataCenter Name already exsists.");
    }
    
    public bool IsDataCenterUnique(string name,int? id=0)
    {
        return !tms.DataCenters.Any(a => a.Name.ToUpper() == name.ToUpper() && a.ID != id);
    }
    

    问题2:有没有更好的方法来解决此问题而不是传递对象ID并将其排除?

1 个答案:

答案 0 :(得分:3)

在字符串上放置一个扩展方法,该方法将区分不区分大小写的比较:

public static class StringExtensions {
    public bool TrimAndEqualsInsensitive (this string str1, string str2) {
        return str1.Trim().Equals(str2.Trim(), StringComparison.CurrentCultureIgnoreCase);
    }
}

然后,您可以在要与另一个字符串进行比较的字符串上调用first.TrimAndEqualsInsensitive(second)

您还可以在模型中的Id字段上放置[CustomValidation(Method="ValidationMethod")],其中ValidationMethod采用字符串/ ID类型,您将检查数据库以使用TrimAndEqualsInsensitive,然后您可以检查在更新数据库之前.IsValid