部分视图未使用ajax正确呈现

时间:2014-05-25 18:22:47

标签: jquery ajax asp.net-mvc-4

我在使用PartialViews和Ajax时遇到问题。我希望根据类别的选择进行搜索,并在partialview中呈现结果列表。

问题是,当我点击搜索按钮时,它会在targetDiv中呈现相同的页面,而不是它应该加载的PartialView。

这是我的代码

@model IPagedList<MvcApplication1.Models.Tender>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"
    type="text/javascript"></script>

<div id="search-section" class="container">

        @using (Ajax.BeginForm(new AjaxOptions
        {
            HttpMethod = "get",
            InsertionMode = InsertionMode.Replace,
            UpdateTargetId = "search_result"

        }))
        {
            <div class="grid4 a-left first">
                <label for="regularInput">Search Tenders:</label>
            </div>

            <div class="searchtext a-right">
               @Html.DropDownList("SearchCatagory", (SelectList)ViewBag.DropDownValues)
               @Html.TextBox("SearchBox", "Type your search key here.")           
               <button type="submit">GO</button>
            </div>


        }
</div>
@Html.Partial("_SideViewLeft")
@Html.Partial("_SearchResult", Model)

4 个答案:

答案 0 :(得分:0)

在您的局部视图中,在其顶部添加此行,因为您的部分正在使用它的主布局呈现为普通视图:

@{

Layout = null;

}

答案 1 :(得分:0)

它不能加载partialView ..只能用于更新html中的目标元素。因此,您必须在控制器中调用一个操作,该操作将使用局部视图获取搜索结果返回。

答案 2 :(得分:0)

您没有指定控制器代码或部分视图,因此这有点猜测。 作为接收表单发布的控制器操作的结果,您需要返回部分页面。

正如您所指定:

Ajax.BeginForm(new AjaxOptions

它将回发到它所在的同一页面,而不是另一个局部视图。这将返回整页并将其插入指定的#search_result元素。

有几个解决方案。

1)发布到特定的操作

Ajax.BeginForm("SearchAction", new AjaxOptions

然后,控制器中的searchAction方法可以检查帖子是否有效并返回searchAction PartialView。

2)检测请求是否来自Ajax

然后,您可以根据用途返回整页或部分页面。

   if (Request.IsAjaxRequest())
   {
        ViewBag.Layout = null
   }
   else
   {
        ViewBag.Layout = "~/Views/Shared/_layout.cshtml";
   }
   return View();

只需确保您的网页包含:

   @{
        Layout = ViewBag.Layout;
   }

然后它可以有条件地呈现为部分或完整视图。

答案 3 :(得分:0)

检查以下

  1. 确保您要返回的视图是局部视图。
  2. 确保从控制器返回部分视图结果。
  3. 部分视图没有布局部分。你不需要将它设置为null。只是没有它!