C# 在我的asp.net mvc中管理字符串的最佳方法(比较并检查是否存在)

C# 在我的asp.net mvc中管理字符串的最佳方法(比较并检查是否存在),c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我正在使用asp.net mvc web应用程序,目前在处理字符串时遇到一些问题,主要原因是:- 在begging和end中插入或编辑带空格的值 编辑字段时,请检查字符串的唯一性 对于第一个问题,我有以下行动方法:- [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(DataCenter dc) { 其中数据中心有一个名为“Name”的属性。现在,如果用户插入“ABC”和“ABC”等值,它们将作为两个不同的值保存

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

  • 在begging和end中插入或编辑带空格的值

  • 编辑字段时,请检查字符串的唯一性

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

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(DataCenter dc)
    { 
    
    其中数据中心有一个名为“Name”的属性。现在,如果用户插入“ABC”和“ABC”等值,它们将作为两个不同的值保存在SQL server上。尽管我已经在数据库上定义了一个唯一的约束。因此,我发现解决这个问题的最佳方法是修改我的操作方法,如下所示:

    [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并将其排除?

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

    public static class StringExtensions {
        public bool TrimAndEqualsInsensitive (this string str1, string str2) {
            return str1.Trim().Equals(str2.Trim(), StringComparison.CurrentCultureIgnoreCase);
        }
    }
    
    然后可以对要与另一个字符串进行比较的字符串调用
    first.trimandQualsInsensitive(second)


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

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

    public static class StringExtensions {
        public bool TrimAndEqualsInsensitive (this string str1, string str2) {
            return str1.Trim().Equals(str2.Trim(), StringComparison.CurrentCultureIgnoreCase);
        }
    }
    
    然后可以对要与另一个字符串进行比较的字符串调用
    first.trimandQualsInsensitive(second)


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

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

    public static class StringExtensions {
        public bool TrimAndEqualsInsensitive (this string str1, string str2) {
            return str1.Trim().Equals(str2.Trim(), StringComparison.CurrentCultureIgnoreCase);
        }
    }
    
    然后可以对要与另一个字符串进行比较的字符串调用
    first.trimandQualsInsensitive(second)


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

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

    public static class StringExtensions {
        public bool TrimAndEqualsInsensitive (this string str1, string str2) {
            return str1.Trim().Equals(str2.Trim(), StringComparison.CurrentCultureIgnoreCase);
        }
    }
    
    然后可以对要与另一个字符串进行比较的字符串调用
    first.trimandQualsInsensitive(second)


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

    您使用的是什么数据库映射库?我使用的是实体框架。您使用的是什么数据库映射库?我使用的是实体框架。您使用的是什么数据库映射库?我使用的是实体框架。您使用的是什么数据库映射库?我使用的是实体框架。在添加或编辑对象之前修剪字符串怎么样?与我目前的方法相比,还有另一种方法吗?将
    [CustomValidation(Method=“ValidationMethod”)]
    放在
    ValidationMethod
    中,其中
    ValidationMethod
    接受一个字符串,您将使用
    TrimandQualsInsensitive检查数据库,然后,您可以在更新数据库之前检查
    。IsValid
    。在添加或编辑对象之前,如何修剪字符串?与我目前的方法相比,还有另一种方法吗?将
    [CustomValidation(Method=“ValidationMethod”)]
    放在
    ValidationMethod
    中,其中
    ValidationMethod
    接受一个字符串,您将使用
    TrimandQualsInsensitive检查数据库,然后,您可以在更新数据库之前检查
    。IsValid
    。在添加或编辑对象之前,如何修剪字符串?与我目前的方法相比,还有另一种方法吗?将
    [CustomValidation(Method=“ValidationMethod”)]
    放在
    ValidationMethod
    中,其中
    ValidationMethod
    接受一个字符串,您将使用
    TrimandQualsInsensitive检查数据库,然后,您可以在更新数据库之前检查
    。IsValid
    。在添加或编辑对象之前,如何修剪字符串?与我当前的方法相比,还有另一种方法吗?在
    [CustomValidation(Method=“ValidationMethod”)]
    中放置一个
    ValidationMethod
    字符串,您将使用
    TrimandQualsInsensitive
    检查数据库,然后您可以在更新数据库之前检查
    。IsValid