0

まず、いくつかのコード:

ページに移動したときに呼び出される最初のアクションは次のとおりです。

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 回だけ呼び出され、キャッシュされたページが返されると思います。

私たちはデータ アクセスにエンティティ フレームワークを使用していますが、私たちの問題はこれと関係があるとは思いません。

4

1 に答える 1

0

送信ボタンで作成された POST リクエストを受け取るには、CodeListing メソッドを [HttpPost] 属性で装飾する必要はありませんか? 私の「ボタン応答メソッド」にはすべてそれがあり、その属性が適用されていないとメソッドが呼び出されないことを思い出しているようです。

于 2011-03-26T05:52:35.180 に答える