0

私が今抱えている問題は、ASP.NET MVCが要求オブジェクト(この場合はユーザー)を検証することです。

public ActionResult Edit(User user)

私がやりたいのは、ユーザーのパスワードが空白のままになっている場合は、パスワードを更新せず、古いパスワードを使用するだけですが、設定されている場合は更新します。

問題は、フレームワークがユーザーにパスワードがないと文句を言うことです。ユーザーオブジェクトを更新しても、文句を言います。

public ActionResult Edit(User user)
{
    user.Password = "Something";

    // more code...
}

どうやらそれはリクエストオブジェクトの検証を行います、この場合検証をスキップする方法はありますか、または少なくともユーザーオブジェクトの変更が完了するまでそれを遅らせる方法はありますか?

これは完全なメソッドコードです

[HttpPost]
public ActionResult Edit(User user)
{    
    if (string.IsNullOrEmpty(user.Password))
    {
        var oldUser = db.Users.Single(u => u.Id == user.Id);
        user.Password = oldUser.Password;
    }

    try
    {
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    catch
    {
        return View(user);
    }
}
4

2 に答える 2

3

パスワードを設定した後も、モデルの状態は無効になります。その後、次を使用してモデルの状態をクリアしてみてください。ModelState.Clear();または、それに応じてModelStateを変更します。つまり、パスワードプロパティについてのみエラー状態をクリアします。ModelState.Remove("Password");

[HttpPost]
public ActionResult Edit(User user)
{    
    if (string.IsNullOrEmpty(user.Password))
    {
        var oldUser = db.Users.Single(u => u.Id == user.Id);
        user.Password = oldUser.Password;
        ModelState.Clear(); // or change the state accordingly (ModelState.Remove("Password");)
    }
.......
}

あなたの投稿から、あなた[Required]はパスワードフィールドの属性を知っているようです。JavaScriptの検証を強制し、パスワードを空白に更新できないことをユーザーに通知することをお勧めします。または、パスワードを含まないフォームでユーザー情報を更新する場合は、パスワードフィールドがなく、モデルがそのフォームに固有の新しいビューモデルまたは一時モデルを作成します。このモデルに投稿して、このモデルにバインドします。次に、一時ユーザーモデルのデータを使用して、実際のユーザーモデルを更新します。これは従うべきより良い習慣になります。

于 2012-10-09T14:47:42.353 に答える
0

ここでの問題はサーバーに関係するのではなく、クライアント側にあります。Requiredプロパティに属性があると仮定します。MVCPasswordがモデルのビューを生成すると、クライアント側の検証、つまり控えめな検証が自動的に生成されます。

特定のシナリオを処理するために独自のカスタム属性を作成することもできますが、それは、独自のクライアント側検証も作成する必要があることを意味します。ここでの簡単な修正は、Required属性を削除し、サーバー側で検証を処理することです。

私がやりたいのは、ユーザーのパスワードが空白のままになっている場合は、パスワードを更新せず、古いパスワードを使用するだけですが、設定されている場合は更新します。

その場合、とにかくあなたの論理は実際には間違っています。ルールで空にすることができるRequiredと指示されているため、に属性を設定しないでください。Password

于 2012-10-09T14:47:55.483 に答える