我在使用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)
答案 0 :(得分:0)
在您的局部视图中,在其顶部添加此行,因为您的部分正在使用它的主布局呈现为普通视图:
@{
Layout = null;
}
答案 1 :(得分:0)
它不能加载partialView ..只能用于更新html中的目标元素。因此,您必须在控制器中调用一个操作,该操作将使用局部视图获取搜索结果返回。
答案 2 :(得分:0)
您没有指定控制器代码或部分视图,因此这有点猜测。 作为接收表单发布的控制器操作的结果,您需要返回部分页面。
正如您所指定:
Ajax.BeginForm(new AjaxOptions
它将回发到它所在的同一页面,而不是另一个局部视图。这将返回整页并将其插入指定的#search_result
元素。
有几个解决方案。
Ajax.BeginForm("SearchAction", new AjaxOptions
然后,控制器中的searchAction
方法可以检查帖子是否有效并返回searchAction
PartialView。
然后,您可以根据用途返回整页或部分页面。
if (Request.IsAjaxRequest())
{
ViewBag.Layout = null
}
else
{
ViewBag.Layout = "~/Views/Shared/_layout.cshtml";
}
return View();
只需确保您的网页包含:
@{
Layout = ViewBag.Layout;
}
然后它可以有条件地呈现为部分或完整视图。
答案 3 :(得分:0)
检查以下
部分视图没有布局部分。你不需要将它设置为null。只是没有它!