C# 返回局部视图或视图

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 () {

在我的主页上,我有一个搜索文本框,当点击搜索时,它调用一个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>

这是我试图让它发挥作用的所有方法。我只是想显示我正在尝试什么,但它不起作用。

服务器端的
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();
  }
}