我的解决方案中有一个控制器和一个强类型视图。在视图中,我有一个最初为空白的隐藏字段。我在视图中有一个表单,用户可以单击"提交"按钮将表单提交给控制器操作。在控制器操作中,我正在修改模型中的值,然后使用修改后的模型重新显示相同的表单(之前发布的)。在View上,我在HTML隐藏字段标记内写了模型字段的值,因此它对客户端javascript是可见的。我遇到的问题是,在javascript中,即使在回发后正确设置了隐藏字段的服务器端值,发布的后面窗体上的隐藏字段的值仍为空白。我需要的是客户端javascipt能够看到隐藏字段的修改值。我需要做些什么才能实现这一目标?
<HttpPost()> _
Function Index(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 = ""
Dim vrl As List(Of MaxServerLib.ValidationResult) = Nothing
Try
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]"
' First thing we do is to perform valiation of the criteria
model.ValidateFieldValues(sCriteria)
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
' Populate the message to be displayed to the user
model.FormatErrorMessage()
' test code start
ModelState.Clear()
' test cod end
' Return RedirectToAction("Index", New With {.sMaxUrl = model.MaxUrl, .sDataSource = model.DataSource, .sSessionTicket = model.SessionTicket, .dtLastCall = model.LastCall, .sFileCabinetid = model.FileCabinetId, .sFileCabinetName = model.FileCabinetName, .sShowMsg = MaxServerLib.EscapeString(model.ShowMsg)})
Return View(model)
Else
' All field values are valid, now attempt to add the document
If model.ExportDocument() Then
' Document export was successful
System.Diagnostics.Debugger.Break()
Else
' Document export failed for some reason
ModelState.AddModelError("", model.LastError)
Return View(model)
End If
End If
' Return RedirectToAction("Index", "SearchResults", New With {.sMaxUrl = model.MaxUrl, .sDataSource = model.DataSource, .sSessionTicket = model.SessionTicket, .dtLastCall = model.LastCall, .sFileCabinetId = model.FileCabinetId, .sFileCabinetName = model.FileCabinetName, .sSearchCriteria = sSearchCriteria})
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
答案 0 :(得分:0)
如果您要回发相同的表单,那么很可能是它在绑定时从模型状态中提取原始值。
在返回表单之前调用ModelState.Clear()以查看是否修复了它。