0

皆さん、こんにちは...

MVC プロジェクトと、添付ボックス付きのフォーム (yahoo メール作成など) があります。

たとえば、「create_request.cshtml」


私が欲しい:

各ユーザーはフィールドに入力し、ファイルをアップロードします (ユーザーがいずれかを選択すると、Ajax によって各ファイルを投稿します)。フォームを送信した後、ページにエラーがある場合 (サーバー側で確認)、ユーザーは応答でアップロードされたファイルを確認します。ページ (エラーが強調表示された応答フォーム)...


上記のシナリオを非常にうまく実装しました。

(Ajax+ Tempdata+ 送信前にサーバー側でファイルを保存 + フォーム送信前にアップロードされたファイルのサム)

私のコントローラーで:

 public void KeepTempData(string name, string value)
    {
        TempData[name] = value;
    }

私の見解では、別の ajax コードでアップロードした後、各ファイル名をサーバーに送信します。

ajaxPostData(KeepTempData, "Attachments", $('#Attachments').val());

しかし、私には問題があります:

アップロードされたファイル名のリストを保持するためにTempDataを使用したため、ユーザーが現在のページにファイルを添付すると、ブラウザで新しいタブが開き、「create_request」ページのアドレスに移動します。ファイルが添付された空のフォームが表示されます...

私の解決策:

おそらく、各ページ(各フォーム)に一意のキーを設定し、それをセッション変数と各ページリクエストの非表示フィールドに保持することで、この問題を解決できます>> 「Saltを使用した偽造防止トークン」または「DateTime.Now」を使用

この投稿をウェブで見つけました。その問題は私の問題のようなものです。そしてその解決策は私の解決策のようなものです。


この問題に対するMVCの適切な解決策は何ですか???

ユーザーがブラウザーのいくつかのタブ (firfox など) でページの異なる要求を持っている場合、競合することなく TempData (またはセッション) を使用するための推奨事項は何ですか?

4

2 に答える 2

0

TempDataの寿命は非常に短いです。TempDataの代わりにSessionを使用する必要があります。

実際のセッションオブジェクトは、TempDataの背後にあるバッキングストレージです。ただし、TempDataに保存されているデータは、現在のリクエストと後続のリクエストで利用できます。

于 2013-03-23T22:46:48.317 に答える
0

私はこの問題を解決しました:

  • クエリ文字列からキーを取得する
  • キーが空の場合
    • コントローラーのアクションで新しい一意のキーを生成します
    • キーを使用してページを新しい URL にリダイレクトします (クエリ文字列のキー値として)
  • そうしないと
    • ViewBag へのキーの追加 (ビューに隠しフィールドを設定するため)
    • キーをセッション変数に保存します。

.

public virtual ActionResult Create(string attkey)
{
     if (string.IsNullOrEmpty(attkey))
     {
         attkey = generatNewNameForSession('key'); // for examle: kye_jhtyujbvkjadsgfvn
         Response.Redirect("myControle/Create, attkey="+attkey), true);
        }
        ViewBag.AttachmentsKey = attkey;
        if (Session[attkey] == null)
            KeepData(attkey, "");
        .
        .
        .

これで、ページの各インスタンスに識別情報が追加され、以前に添付されたファイルを表示するかどうかを決定できるようになりました。

于 2013-04-16T15:17:05.687 に答える