現時点では 2 つのコントローラー アクションがあります。1 つは一意の識別子に基づいて厳密に型指定されたビューを表示するアクションで、もう 1 つはモデルを変更するアクションです。私が何を意味するかを視覚化するためのコードを次に示します。
[HttpGet]
[ActionName("Edit")]
public ActionResult UpdateDevice(string code)
{
// Request the device based on the code.
var device = GetDeviceModel(code);
// Present the device in a view.
return View(device);
}
[HttpPost]
[ActionName("Edit")]
public ActionResult UpdateDevice(DeviceModel model)
{
}
コードはデバイスを識別しますが、変更することもできます。それが私の問題です: post メソッド内では、 を使用して新しいコードにアクセスできますが、古いコードを変更できるようにするためには、古いmodel.Code
コードも知る必要があります。
いくつかの代替手段を試しましたが、どれも私の要件を満たしていませんでした。
ViewData
ポストまで永続化されません。TempData
セッションまたは Cookie に基づいていますが、現時点ではどちらも使用したくありません。- 非表示のフィールドとモデル バインディングは、クライアント側で操作できるため、オプションではありません。
最後に、次のようにクエリ文字列からデータを要求しようとしました。
[HttpPost]
[ActionName("Edit")]
public ActionResult UpdateDevice(DeviceModel model)
{
var oldCode = Request.QueryString["code"];
}
そして、これはうまくいきます!しかし、ウェブ上でこれに関するリソースは見つかりませんでした。だから私の質問は次のとおりです:投稿アクション内でクエリ文字列を使用すると、変更に対して安全ですか? そして、これが機能するための条件は何ですか(もしあれば)?
これがコードを「覚える」ための有効な方法でない場合、代替手段はありますか?