0
I have used PartialView but it renders the whole view after success full ajax post
This is my view
 my ul which i want to update
<ul id="ULdinnerlist">
    @* my foreach loop*@
    @foreach (var item in Model)
    {

        <li>  Title : @Html.DisplayFor(modelItem => item.Title)<br />
              EventDate : @Html.Encode(item.EventDate.ToShortDateString()+ " @ " + item.EventDate.ToShortTimeString()) 
              <p>Description : @Html.DisplayFor(modelItem => item.Description)</p><br />
               HostedBy : <b>@Html.DisplayFor(modelItem => item.HostedBy)</b> (@item.ContactPhone)<br />
        </li>
    }


</ul>

my ajax route link @ Ajax.RouteLink( ">>>"、new {page = Model.PageIndex + 1}、new AjaxOptions {UpdateTargetId = "ULdinnerlist"})

ON controller: my action for reindering 

public ActionResult Index(int? Page)
        {
            int PageSize = 5;
            IQueryable<Dinner> dines = from dine in db.Dinners orderby dine.EventDate select dine;
            var paginatedDinners = new PagingList<Dinner>(dines, Page ?? 0, PageSize);

            checking ajax post and rendering accordingly    
            if (Request.IsAjaxRequest())
            {
                return PartialView(paginatedDinners);
            }
            return View(paginatedDinners);
        }

問題は、ページングを実行するとビュー全体がレンダリングされることです。ありがとう

4

2 に答える 2

0

AJAXリクエストに応答して別の情報を返すには、別のビューをレンダリングする必要があります。PartialView(same_view_name)を返すだけでは、実際には何も起こりません。

または、現在のビュー内で、リクエストがAJAXリクエストであるかどうかを確認してから、関連するセクションを選択的にレンダリングします。

于 2012-10-22T05:23:12.420 に答える
-1

ビューを再調整する代わりに、PartailViewまたはstringを返す必要があります。これは、部分ビューの戻りタイプがMvcHtmlStringであるためです。

コントローラー内

public string SomeAction(int? Page)
        {
            int PageSize = 5;
            IQueryable<Dinner> dines = from dine in db.Dinners orderby dine.EventDate select dine;
            var paginatedDinners = new PagingList<Dinner>(dines, Page ?? 0, PageSize);

           return RenderPartialViewToString("PartialViewName",paginatedDinners )
        }

protected string RenderPartialViewToString(string viewName, object model)
        {
            if (string.IsNullOrEmpty(viewName))
                viewName = ControllerContext.RouteData.GetRequiredString("action");

            ViewData.Model = model;

            using (StringWriter sw = new StringWriter())
            {
                ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
                ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
                viewResult.View.Render(viewContext, sw);
                return sw.GetStringBuilder().ToString();
            }
        }

Ajaxリクエストを処理するには、別のアクションを使用する必要があります。これは、戻りタイプが異なるため、「インデックス」では使用できないためです。

partailビュー名とそのモデルをRenderPartialViewToStringメソッドに渡すと、PartialのRenderHtmlが返されます。

//actionLink
    @Ajax.RouteLink(">>>","SomeAction",new { page = Model.PageIndex + 1 },new AjaxOptions { UpdateTargetId = "ULdinnerlist",InsertionMode =InsertionMode.Replace })
于 2012-10-22T05:31:58.383 に答える