0

私は MVC を初めて使用し、叔母のビジネス用の e コマース アプリケーションに取り組んでいます。カテゴリ別に検索するメニューを表示するための部分ビューを含む製品リスト ページがあります。Html.ActionLinkヘルパーではすべてうまくいきましたが、AJAXに切り替えると、製品が更新されますが、リストビュー全体が更新したいdivに挿入されます(ヘッダーとすべてが含まれています)。私が定義した UpdateTargetId 、またはおそらくレイアウトと関係があると思います(私はCSSの専門家ではありません)。だからここに行きます:

製品コントローラ:

public ViewResult List(string category, int page = 1)
    {
        JProductListViewModel model = new JProductListViewModel
        {
            JProducts = repository.JProducts
                .Where(p => category == null || p.Category == category)
                .OrderBy(p => p.ProductID).Skip((page - 1) * PageSize).Take(PageSize),
            PagingInfo = new PagingInfo
            {
                CurrentPage = page,
                ItemsPerPage = PageSize,
                TotalItems = category == null ?
                    repository.JProducts.Count() :
                    repository.JProducts.Where(x => x.Category == category).Count()
            },
            CurrentCategory = category
        };
        return View(model);
    }

メニューの一部:

@foreach (var link in Model)
{
    <div class="catmenuitem">
    @if (link != null)
    {
        @Ajax.RouteLink(link, "", new { controller = "Product", action = "List", category = link, page = 1 }, new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, 
    UpdateTargetId = "List", LoadingElementId = "loading", LoadingElementDuration = 1000 },
    new { @class = link == ViewBag.SelectedCategory ? "selected" : null })
    }
    </div>
}

リストビュー:

<div id="List">
    @foreach (var p in Model.JProducts)
    {
            Html.RenderPartial("ProductSummary", p);
    }
</div>

私が得ている結果は、List.cshtmlビュー全体が複製され、「List」divに挿入されています。ある種のばかげた間違いになる気がしますが、見つけられないようです。

ありがとう、クウィンザー5

4

1 に答える 1

0

リスト ビューの新しい部分ビューを作成し、_List という名前を付ける必要があります。次に、List ビューを変更して _List 部分ビューを含め、List コントローラーを変更して、AJAX 要求の場合は _List 部分ビューを返します。

リスト部分ビュー _List:

<div id="List">
@foreach (var p in Model.JProducts)
{
        Html.RenderPartial("ProductSummary", p);
}
</div>

リストビュー:

<div></div>
@Html.Partial("_List", Model)
<div></div>

リストコントローラーの変更:

        if (Request.IsAjaxRequest())
        {
            return PartialView("_List", model);
        }

リストビューとその部分ビューで異なる要素を持つことができるようになりました

于 2013-04-02T14:32:37.113 に答える