C# 返回局部视图或视图
在我的主页上,我有一个搜索文本框,当点击搜索时,它调用一个ajax搜索函数,该函数调用我的控制器。根据传递的searchString,我想用gridview替换一个div(这部分正在工作),或者让它加载一个新页面。相反,它在局部视图替换的同一个div中加载新视图。我该怎么做?我会把我的代码贴在下面。 我所有的数据都恢复正常,其他一切都正常C# 返回局部视图或视图,c#,asp.net,ajax,asp.net-mvc,C#,Asp.net,Ajax,Asp.net Mvc,在我的主页上,我有一个搜索文本框,当点击搜索时,它调用一个ajax搜索函数,该函数调用我的控制器。根据传递的searchString,我想用gridview替换一个div(这部分正在工作),或者让它加载一个新页面。相反,它在局部视图替换的同一个div中加载新视图。我该怎么做?我会把我的代码贴在下面。 我所有的数据都恢复正常,其他一切都正常 <script> $(function () { $('.search').click(function () {
<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>
这是我试图让它发挥作用的所有方法。我只是想显示我正在尝试什么,但它不起作用。服务器端的
if
不会影响javascript在成功时所做的事情:它将调用的结果填充到一个div中
如果这不是您想要做的,您需要在javascript中测试结果,如果得到的不是局部视图,则需要执行其他操作。确保在使用jQuery调用action时,action会将HTML字符串返回到jQuery中,如果您想重定向,那么可以从您的操作返回一些json字符串到jQuery调用,并从那里重定向页面。这还没有得到充分的测试
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>
RedirecToAction
在ajax调用情况下不起作用,返回url作为字符串并使用javascript/jqueryOh重定向到url是的,我忘了提到,有很多我尝试让它工作的方法的例子,我想这可能与此有关,但我真的不知道该怎么做。你知道我可以看什么例子吗?不是随便的。您可以在尝试重定向的情况下返回URL,并在success方法中进行测试(结果以http开头,例如),并更改窗口位置,而不是修改div内容。有时我确实想修改div的内容。可以这样做吗?在修改之前只需测试一个url-在成功方法中有一个决定是更改位置还是修改div的方法好的,所以我知道这正是我想做的,但它不太管用。但是我认为javascript中的If语句工作不正常,我这么说是因为它仍然在div的位置加载我的视图。@Darkwingduck它不应该加载视图,因为它在If else
块中。调试以查看data.IsRedirect
是否为真。另外,输入返回
在window.location.href=data.RedirectUrl的末尾代码>我让它工作,但我必须添加public ActionResult Details(){long x=Convert.ToInt64(TempData[“id”]);var model=cs.GetById(x);if(model!=null){return View(“Details”,model);}else{返回视图(“主视图”);}}
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();
}
}