まず、いくつかのコード:
ページに移動したときに呼び出される最初のアクションは次のとおりです。
public ActionResult ListCodeTypes()
{
var CodeList = _entities.Master_Codes.ToList();
List<SelectListItem> items = new List<SelectListItem>();
for (int i = 0; i < CodeList.Count; i++)
{
items.Add(new SelectListItem {
Text = CodeList[i].description,
Value = CodeList[i].code_table_name
});
}
ViewData["items"] = items;
return View("CodesAdmin");
}
CodesAdmin aspx ページ/ビュー コードは次のとおりです。
<%@ Page Title="" Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
CodesAdmin
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% Html.RenderPartial("subMenu/ParcelSubMenu"); %>
<h2>CodesAdmin</h2>
<%= Html.DropDownList("items")%>
<input type="button" id="btnGetCodes" name="GetCodes"
value="Get Codes" class="fg-button ui-state-default appButton"
onclick="searchClick()"/>
<div id="CodeAdminPlaceHolder"></div>
<script type="text/javascript">
function searchClick() {
var searchText = $("#items").val();
$.get("/Admin/CodeListing/",
{ identifier: searchText }, function (data) {
$("#CodeAdminPlaceHolder").html(data);
}, "html");
}
</script>
</asp:Content>
ここで、ボタンのクリックから呼び出されるコントローラー コードを次に示します。
public ActionResult CodeListing(string identifier)
{
_entities.Refresh(System.Data.Objects.RefreshMode.StoreWins,
_entities.Address_Type_Codes);
var CodeList = _entities.Address_Type_Codes.
Where(p=>p.active == true).ToList();
return PartialView("ListOfAddrCodes", CodeList);
}
CodeListing アクションは、実際には「identifier」パラメーターに応じて複数の入力を処理します。
"CodeAdminPlaceHolder" div でレンダリングされた結果の部分ビューは次のとおりです。
<div id="Div15" class="ui-widget-content">
<table id="CodeListing" class="tablesorter">
<thead>
<tr>
<th></th>
<th>
Short Description
</th>
<th>
Long Description
</th>
<th>
Active
</th>
<th>
Tax Year
</th>
<th>
Note
</th>
</tr>
</thead>
<tbody>
<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.ActionLink("Deactivate",
"DeactivateAddrCode", new {
id=item.address_type_codes_id
}) %>
</td>
<td>
<%: item.short_description %>
</td>
<td>
<%: item.long_description %>
</td>
<td>
<%: item.active %>
</td>
<td>
<%: item.tax_year %>
</td>
<td>
<%: item.note %>
</td>
</tr>
<% } %>
</tbody>
<tfoot>
<tr id="pager">
<td colspan="6">
<img src="/Content/TableSorter/Themes/Default/first.png"
class="firstPage" alt="First" />
<img src="/Content/TableSorter/Themes/Default/prev.png"
class="prevPage" alt="Prev"/>
<input type="text" class="pagedisplay"/>
<img src="/Content/TableSorter/Themes/Default/next.png"
class="nextPage" alt="Next"/>
<img src="/Content/TableSorter/Themes/Default/last.png"
class="lastPage" alt="Last"/>
<select class="pagesize">
<option selected="selected" value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="20">20</option>
</select>
</td>
</tr>
</tfoot>
</table>
</div>
誰かが「非アクティブ化」リンクをクリックすると、次のアクションが呼び出されます。
public ActionResult DeactivateAddrCode(int id)
{
Address_Type_Codes ac1 = _entities.Address_Type_Codes.
First(c => c.address_type_codes_id == id);
ac1.active = false;
_entities.Refresh(System.Data.Objects.RefreshMode.ClientWins,
_entities.Address_Type_Codes);
UpdateModel(ac1);
_entities.SaveChanges();
return RedirectToAction("ListCodeTypes");
}
これにより、ドロップダウン ボックスとボタンを含むページが最初に読み込まれます。
問題は、ボタンをクリックしてアドレス タイプを読み込むときに、「CodeListing」コントローラ アクションが呼び出されないことです。「CodeListing」コードにブレークポイントを設定してこれを確認したところ、案の定、コードは呼び出されません。そのため、ドロップダウン リストで選択してボタンをクリックすると、無効なデータが表示されます。VS でアプリを停止して再起動すると、データが正しく一覧表示されます。
CodeListing アクションは 1 回だけ呼び出され、キャッシュされたページが返されると思います。
私たちはデータ アクセスにエンティティ フレームワークを使用していますが、私たちの問題はこれと関係があるとは思いません。