問題
検索条件要素を一覧表示し、ユーザーが要素をクリックしてその検索条件を削除できるようにする検索結果ページがあります。
条件要素の 1 つを初めてクリックして削除すると、すべてが期待どおりに機能します。
ただし、条件要素が 2 回目に削除されると、最初に削除された要素が元に戻ります。
例
検索条件: {topic: "abuse"}, {profession: "admin"}, {keywords: "animal"}
「トピック」要素をクリックして削除すると、結果ページが表示されます{profession: "admin"}, {keywords: "animal"}
「キーワード」をクリックして削除すると、ページが正しく表示されなくなりました{topic: "abuse"}, {profession: "admin"}
この時点での正しい表示は、単一のタグのみである必要があります{profession: "admin"}
コード
SearchController.Results()
<HttpPost>
<NoCache>
Function Results(ByVal model As SearchCriteria) As ActionResult
Dim resultsModel As SearchResultsModel = New SearchResultsModel
Dim searchQuery As IQueryable(Of [Class]) = Nothing
Dim searchResults As List(Of [Class]) = Nothing
Dim categoryValueQuery As IQueryable(Of CourseCategoryValue) = Nothing
Dim query As IQueryable(Of [Class]) = Nothing
Dim queries As List(Of IQueryable(Of [Class])) = New List(Of IQueryable(Of [Class]))
model = RemoveCriteria(model)
model.RemovalCriteria = String.Empty
resultsModel.Criteria = model
Return View(resultsModel)
End Function
SearchController.RemoveCriteria()
<NonAction>
Function RemoveCriteria(ByVal model As SearchCriteria) As SearchCriteria
Dim result As SearchCriteria = ObjectMapper.Duplicate(model)
If Not String.IsNullOrEmpty(result.RemovalCriteria) Then
Select Case result.RemovalCriteria.ToLower.Trim
Case "title"
result.Title = String.Empty
Case "keywords"
result.Keywords = String.Empty
Case "healthtopic"
result.HealthTopic = String.Empty
Case "city"
result.City = String.Empty
Case "profession"
result.Profession = String.Empty
End Select
End If
Return result
End Function
結果.vbhtml
@Imports System.Reflection
@ModelType SearchResultsModel
@Code
ViewData("Title") = "Results"
Dim properties As List(Of PropertyInfo) = Model.Criteria.GetType.GetProperties.ToList
Dim names() As String = {"keywords", "healthtopic", "profession"}
End Code
<h2>Results</h2>
@If (Not Nothing Is Model) AndAlso (Not Nothing Is Model.Results) Then
@<h3>Displaying @Model.Results.Count of @Model.ResultCount classes</h3>
End If
@Using Html.BeginForm("Results", "Search", Nothing, FormMethod.Post, New With {.id = "removalForm"})
@Html.Hidden("RemovalCriteria", String.Empty, New With {.id = "removalCriteria"})
@<div>
<span style="font-weight: bold;">Search Criteria </span>
@For Each name As String In names
Dim prop As PropertyInfo = (From p In properties Where p.Name.ToLower = name Select p).FirstOrDefault
Dim value As Object = prop.GetValue(Model.Criteria)
If Not Nothing Is value Then
value = value.ToString
If Not String.IsNullOrEmpty(value) Then
@<span class="criteriaTag" title="click to remove" onclick="submitRemovalForm('@prop.Name');">@prop.Name<span class="criteriaValue">@value</span></span>
End If
End If
@Html.Hidden(prop.Name, value)
Next
</div>
End Using
<script type="text/javascript">
function submitRemovalForm(removeTag) {
$('#removalCriteria').val(removeTag);
$('#removalForm').submit();
}
</script>
では、なぜこれが起こっているのかについて何か考えはありますか?