在我的主页上,我有一个搜索文本框,当点击搜索时,调用一个调用我的控制器的ajax搜索功能。基于传递的searchString,我想要用gridview替换div(这部分正在工作)或者让它加载一个新页面。相反,它将在部分视图替换的同一div中加载新视图。我怎样才能做到这一点?我发布下面的代码。 我的所有数据都正确回归,其他一切工作正常。
<script>
$(function () {
$('.search').click(function () {
var $buttonClicked = $(this);
var searchString = $("#searchStringTextBox").val();
$.ajax({
url: '@Url.Action("ShowGrids")',
type: 'GET',
data: { searchString: searchString },
modal: true,
success: function (partialView) {
$('#gridViews').html(partialView);
$('#gridViews').show();
}
});
});
});
</script>
控制器
public ActionResult ShowGrids(string searchString)
{
if (IsValidPersonIdFormat(searchString))
{
var id = searchString.Substring(1);
id = id.Replace("-", "");
var x = Convert.ToInt64(id);
var model = cs.GetById(x);
TempData["model"] = model;
return Redirect(Url.Action("ShowPersonDetails", "Data"));
}
else if(IsValidIdFormat(searchString))
{
var id = searchString.Substring(1);
id = id.Replace("-", "");
var model = ps.GetById(Convert.ToInt64(id));
return View("Details", model);
}
else if (IsValidServiceIdFormat(searchString))
{
var id = searchString.Substring(1);
id = id.Replace("-", "");
var model = vss.GetById(Convert.ToInt64(id));
return PartialView("ServiceDetails", model);
}
}
public ActionResult ShowPersonDetails()
{
var model = TempData["model"];
return View("PersonDetails", model);
}
我有办法让它发挥作用。只是想到我会展示我正在尝试的东西而且它不起作用。
答案 0 :(得分:2)
服务器端的if
不影响javascript在成功时所做的事情:它将调用结果填入div。
如果那不是你想要做的,你需要在javascript中测试结果,如果你得到的不是局部视图,还要做其他事情。
答案 1 :(得分:1)
确保当你使用jQuery调用action时,action会将HTML字符串返回到jQuery中,如果你想重定向而不是从你的动作返回一些json字符串到jQuery调用并从那里重定向页面
答案 2 :(得分:1)
你可以这样做。这尚未经过全面测试。
public JsonResult ShowGrids(string searchString)
{
if (IsValidPersonIdFormat(searchString))
{
var id = searchString.Substring(1);
id = id.Replace("-", "");
var x = Convert.ToInt64(id);
var model = cs.GetById(x);
TempData["model"] = model;
return Json(new { IsRedirect = true, RedirectUrl = Url.Action("ShowPersonDetails", "Data") }, JsonRequestBehavior.AllowGet);
}
else if(IsValidIdFormat(searchString))
{
var id = searchString.Substring(1);
id = id.Replace("-", "");
var model = ps.GetById(Convert.ToInt64(id));
return Json(new { IsRedirect = false, Content = RenderRazorViewToString("Details", model) }, JsonRequestBehavior.AllowGet);
}
else if (IsValidServiceIdFormat(searchString))
{
var id = searchString.Substring(1);
id = id.Replace("-", "");
var model = vss.GetById(Convert.ToInt64(id));
return Json(new { IsRedirect = false, Content = RenderRazorViewToString("ServiceDetails", model) }, JsonRequestBehavior.AllowGet);
}
}
<script>
$(function () {
$('.search').click(function () {
var $buttonClicked = $(this);
var searchString = $("#searchStringTextBox").val();
$.ajax({
url: '@Url.Action("ShowGrids")',
type: 'GET',
data: { searchString: searchString },
modal: true,
success: function (data) {
if(data.IsRedirect){
window.location.href = data.RedirectUrl;
}
else{
$('#gridViews').html(data.Content);
$('#gridViews').show();
}
}
});
});
});
</script>
将视图呈现为字符串的代码:
public string RenderRazorViewToString(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,
viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View,
ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}