0

Web アプリケーションに MVC 3 (RAZOR) を使用しています。

従業員レコード (名、姓、生年月日など) を処理する単純な「編集」ビューがありますが、一部のデータは機密で暗号化されています。機密データは暗号化され、base 64 文字列に変換されます。機密データは編集ビューでは編集できませんが、従業員レコードの他のフィールドを編集する必要がある場合にポストバックで失われないように、隠しフィールドに渡されて「保持」されます。

このデータはベース 64 であるため、非表示のフィールドにはレンダリングされないと思います。おそらく、MVC 3 のセキュリティの問題です。私のモデルでは、このプロパティが Required としてマークされていることにも言及する必要があります。そのため、ポストバックするには再入力する必要があります。

隠しフィールドで使用してもよいことを MVC に伝えるために、このプロパティに付ける必要がある特別な属性はありますか? 他のアイデアはありますか?

RAZOR では、隠しフィールドの宣言は次のようになります。

@Html.HiddenFor(model => model.SomeBase64String)

HTML では、次のようにレンダリングされます。

<input style="margin-right: 5px;" id="SomeBase64String" name="SomeBase64String" value="" type="hidden" data-val="true" data-val-required="SomeBase64String is required.">

Base 64 文字列の例は次のとおりです。

OW0iSdFXUqaUT82qjqaG5w==

編集 (GET) コントローラー アクション内には、次のものがあります。

        public ActionResult Edit(int id)
        {
            Employee employee;

            if (id == 0)
            {
                employee = Employee.CreateNew();
            }
            else
            {
                employee = _employeeDatabaseAccess.GetEmployeeById(id);

                //employee.SomeBase64String is already set. it's stored in the db...
            }

            return View(employee);
        }
4

2 に答える 2

1

ビューをレンダリングする前に、コントローラー アクション内のビュー モデルに対応するプロパティを設定していることを確認してください。

model.SomeBase64String = ...
return View(model);

ただし、暗号化を気にしないことをお勧めします。これを処理する正しい方法は、ユーザーが編集する必要がない場合、この情報をビューにまったく渡さないことです。次に、POST コントローラー アクションで、レコードの ID を使用して、最初に読み取った場所からこの情報を読み取るだけです (データ ストアなどを使用していると思います)。

ユーザーが表示および編集することになっている情報のみをビューに渡す必要があります。機密情報を渡すことは、トラブルを求めるようなものです。

于 2013-02-22T16:16:15.037 に答える