1

アクションに投稿された情報からオブジェクトを更新する必要があるシナリオがあります。情報がページにある限り、これは正常に機能します。ただし、モデル状態に文句を言わせたくない場合は、隠しフィールドに情報を入れる必要があります。

例として、以下のクラスをモデルとして使用しているとしましょう。

public class Client
{
    [Required]
    public string Name { get; set; }

    public string Email { get; set; }

    public int Id { get; set; }
}

ユーザーに名前を編集させたくない場合は、それを非表示フィールドに含めて、モデルにバインドし、検証に合格するようにする必要があります。

私が抱えている問題は、より機密性の高い情報で使用すると明らかに安全ではないということです. だから私はこれを試しました:

public virtual ActionResult Save(Client model, int clientId)
    {
        var client = datasource.LoadEntity(adapter, clientId); // clientId is passed as a querystring to the action

        if (!TryUpdateModel(client))
            return new RedirectResult('The edit page URL');
    }

問題は、モデル状態が、データベースからクライアント オブジェクトにロードされたにもかかわらず、「名前」の値が利用できないことについてまだ不平を言うことです。

明らかに私は何か間違ったことをしていますが、何がわかりません。

4

3 に答える 3

0

オーバーロード を使用できますTryUpdateModel(TModel, string\[\])。私の理解が正しければ、次のように、更新に含めるプロパティを指定できるはずです。

public virtual ActionResult Save(Client model, int clientId)
{
    var client = datasource.LoadEntity(adapter, clientId);

    if (!TryUpdateModel(client, new string[] { "Email" }))
        return new RedirectResult('The edit page URL');
}

試したことはありませんが、期待どおりに動作するかどうか教えていただけますか?

于 2013-09-12T11:45:00.487 に答える
0

ここで概説したソリューションを使用しました: Asp.net MVC 3 Validation exclude some field validation in TryUpdateModel

基本的に、これらのフィールドが存在しない場合、Modelstate から検証が削除されます。これは、これらの値がデータベースから取得されるときに機能します。

于 2013-09-12T11:59:48.853 に答える