0

私はasp.net mvc Webアプリケーションに取り組んでいますが、現在、基本的に次の理由により、文字列を処理するときにいくつかの問題が発生しています:-

  1. 最初と最後に空白を使用して値を挿入または編集します。

  2. フィールドを編集するときは、文字列の一意性を確認してください。

最初の問題については、次のアクション メソッドがあります。

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

データセンターには「名前」という名前のプロパティがあります。ユーザーが「ABC」や「ABC」などの値を挿入すると、それらは 2 つの異なる値として SQL サーバーに保存されます。データベースに一意の制約を定義しましたが。したがって、これを解決するために私が見つけた最良の方法は、アクションメソッドを次のように変更することです。

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

しかし、関連するすべてのアクション メソッドと、編集および作成アクション メソッドでそうすることにしました。

質問 1: 文字列をトリミングするためのより良い方法はありますか?

2番目の問題は、私がチェックしていたアクションメソッドで、サービスメソッドを書くことによって、次のように文字列が一意であるかどうかです:-

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 に答える