0

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

  1. 在乞求和结尾插入或编辑带有空格的值。

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

对于第一个问题,我有以下操作方法:-

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

其中数据中心有一个名为“名称”的属性。现在,如果用户插入诸如“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并排除它?

4

1 回答 1

3

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

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

然后你可以调用first.TrimAndEqualsInsensitive(second)你想要比较的字符串。

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

于 2013-11-01T14:41:21.413 回答