Сначала немного кода:
Вот начальное действие, которое вызывается при переходе на страницу:
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");
}
Вот страница Aspx CodesAdmin / код просмотра:
<%@ 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».
Результирующий частичный вид, представленный в div "CodeAdminPlaceHolder":
<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 вызывается только один раз, и я думаю, что кешированная страница возвращается.
Мы используем сущностный каркас для доступа к данным, но я не думаю, что наши проблемы как-то связаны с этим.