2

私の問題の事実は次のとおりです。

  1. ASP.Net MVC 4 Web アプリケーションにフォームがあります。
  2. フォームのフィールドは、モデル内の明示的な静的プロパティに関連付けられていません。代わりに、変更可能な動的フィールドです。
  3. フォームが送信されると、FormcCollection を使用してフィールド値に入力された値を取得します。
  4. 初めてフォームを送信したときは、すべて問題ありません。FormCollection の値は、フォームの値を正確に反映しています。
  5. 1 つ以上の無効なフィールドが原因でフィールド値に問題がある場合は、フォームを再表示します。
  6. ユーザーがフォームの値を変更して検証エラーを修正し、同じフォームを再送信した場合、FormCollection は最新のフォーム値を反映するように更新されません。代わりに、最初の送信からのフィールド値が常に含まれます。

なぜこれが起こっているのですか、どうすれば修正できますか?

<HttpPost()> _
<HttpParamAction()> _
Function Upload(ByVal model As MaxDocument, formcollection As FormCollection) As ActionResult
  Dim sCriteria As String = ""
  Dim nKeyIndex As Integer = 0
  Dim nFieldIndex As Integer = -1
  Dim sFieldValue As String = ""

  Try
    ' Build sCriteria from the submitted formcollection
    model.GetFileCabinetFieldList()
    For nFieldIndex = 0 To (model.IndexFieldCount - 1)
      sFieldValue = ""
      If nFieldIndex > 0 Then
        sCriteria += "~"
      End If
      Dim fcf As MaxServerLib.FileCabinetField = model.criterionAtIndex(nFieldIndex)
        ' Get the field value corresponding to this field
        For Each oKey As Object In formcollection.AllKeys
          If oKey.ToString = fcf.sFieldName Then
            sFieldValue = formcollection(oKey.ToString)
            Exit For
          End If
        Next
        sCriteria += sFieldValue
      Next
      If sCriteria = "" Then sCriteria = "[BlankIndex]"

      ' Set the criteria property of the model, which will be used for both field validation and document export.
      model.Criteria = sCriteria

      ' First thing we do is to perform valiation of the criteria
      model.ValidateFieldValues()
      If Not model.AllFieldValuesValid() Then
        ' Handle case where one or more field values are invalid.
        ' In this case we want to redisplay the form but show an error message listing the invalid fields

        model.HasAttemptedUpload = True
        ' Set tempData before redirect:
        TempData("MaxDocument") = model
        Return RedirectToAction("Index")
      Else
        ' All field values are valid, now attempt to add the document
    ...
      End If

    Catch ex As Exception
      System.Diagnostics.Debugger.Break()
    End Try
  'End If

  ' If we got this far, something failed, redisplay form
  Return View(model)

End Function

編集:

発生しているように見えるのは、ブラウザが最初の投稿から投稿アクションをキャッシュし、後続のすべての投稿 (最初の投稿の後) で、現在の投稿の結果をレンダリングする代わりに、最初の投稿のキャッシュされた結果をレンダリングすることです。なぜこれを行うのでしょうか?

4

1 に答える 1