在MVC 4中加载ajax成功方法的部分视图

时间:2014-07-13 17:09:13

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

问题陈述:查看无法加载ajax成功方法。

描述: 我有几个下拉级联(基于第一个值的第二个绑定)。 在更改第一个下拉列表时,我绑定了第二个下拉列表,再次更改了第二个下拉列表,现在在右侧,我想根据两个下拉值显示一个记录列表。

为此,我在下拉列表2的onchange事件中使用以下JS代码:

function ShowDocsList() {
        var teamId = $('#TeamID').val();
        var projectId = $("#ProjectID").val();
        var Url = "@Url.Content("~/DocsHome/DocsList")";
        $.ajax({
            url: Url,
            type:'POST',
            dataType: 'html',
            data: { TeamID: teamId ,ProjectID : projectId},
            success: function (data) {
            return data;
              $('.docs-detail').html(data);
            }
        });

在这里,在DocsHome控制器中,DocsList方法在第二个下拉列表的更改中受到影响,这是项目下拉列表。但是视图没有被渲染。以下是我的控制器代码:

 public ActionResult DocsList(int teamId, int projectId)
        {
            List<CustomerViewModel> customerViewsModels = SmartAdminHelper.GetCustomers(db1);
            if (Request.IsAjaxRequest())
                return PartialView("DocsList");
            else
                return View("DocsList");

        }

同样,我在List中获取记录但是在调试时它没有传递到DocsList视图,据我说这是正确的。

这里DocsList是我想要渲染的视图,作为第二个下拉列表更改的部分视图。 根据我的知识,虽然调试它返回点返回PartialView(“DocsList”),然后再次回到ajax成功方法,最后我发现我做错了。

早些时候我让Json获取数据但是在这里我从ajax调用action方法。因此,不确定这也可能是一个问题,因为我是新手。

我做错了什么,到底在哪里?

1 个答案:

答案 0 :(得分:0)

Saroj,我发现这是一个老问题,你需要快速完成它,但如果你想回到这里,我会加上我的两分钱。您需要删除David和Ehsan在上面提到的return语句。回调函数的其余部分完成了应有的功能。在你的动作方法中,你看起来并没有对你传入的参数做任何事情。我假设在你将视图传递给客户端后你会想到这一点。所以,让我们将该视图下载到客户端。

我喜欢将呈现的局部视图作为HTML字符串传递回客户端。我使用一种方法来执行此操作,该方法保存在每个控制器继承的控制器基类中。要使用该方法,您需要引用System.Web.Mvc和System.IO名称空间。

方法如下:

private string RenderViewToString( 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();
            }
        }

将模型和视图名称传递给方法,它将呈现的视图HTML作为字符串返回,您可以将其作为ContentResult返回给客户端。

更新您的操作方法,如下所示:

 public ActionResult DocsList(int teamId, int projectId)
            {
                List<CustomerViewModel> customerViewsModels = SmartAdminHelper.GetCustomers(db1);
                if (Request.IsAjaxRequest())
                    var viewContents = RenderViewToString("DocsList", customerViewsModels);
                    return Content(viewContents);
                else
                    return View("DocsList");

            }

假设您希望渲染视图出现的元素上有css类'.docs-detail',那么您将开始营业。希望这有帮助!