如何使用ajax调用将json数据传递给控制器​​并呈现部分视图作为结果?

时间:2015-08-14 05:47:49

标签: ajax json asp.net-mvc

我需要将模型对象传递给控制器​​,并从那里调用服务以生成局部视图的数据。我能够将json对象传递给主视图,并且我能够生成局部视图。但是,我在调用后在主视图中渲染局部视图时遇到困难。如果我没有将对象传递给控制器​​,我可以渲染局部视图。

我的主要目标是:传递json对象并使用相同的ajax调用渲染局部视图。

非常感谢您的帮助。

我为这里冗长的代码道歉,但不知道如何以其他方式做到这一点。

以下代码有效,我不通过ajax调用传递Json对象,并在控制器中创建部门对象:

主视图代码:

@model PartialViewDemo.Models.School
....
<body>
    ....
    <div>
        @Html.Partial("_MyPartialView", Model.Department )
    </div>
    ....
    <div id="divTest"></div>
    <input type="button" value="Click" id="btnClick"/>
</body>

<script src="~/Content/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
    $(function() {
        $('#btnClick').click(function(data) {
            var dept = {
                DepartmentName: "test Dept",
                DepartmentRule: "test rule",
                Comment:" test comment"
            };
            $.ajax({
                url: '/home/ShowPartailView/',
                success: function (result) {
                    $('#divTest').html(result);
                },
                failure: function (errMsg) {
                    alert(errMsg);
                }
            });
        });
    });
</script>

控制器代码:

public ActionResult Index()
{
    var model = new School();
    model.Department = GetDepartmentList(3);
    return View(model);
}

public List<Department> GetDepartmentList(int counter)
{
    var model = new List<Department>();
    for (var i = 1; i <= counter; i++)
    {
        var data = new Department();
        data.DepartmentName = "Dept " + i;
        data.DepartmentRule = "Rule " + i;
        data.Comment = "Comment " + i;
        model.Add(data);
    }
    return model;
}

public PartialViewResult ShowPartailView()
{
    Department dept = new Department()
    {
        DepartmentName = "test Dept",
        DepartmentRule = "test rule",
        Comment = "We Rock!"
    };
    PartialViewResult result = PartialView("_MySecondPartialView", dept);
    return result;
}

部分查看代码:

@model PartialViewDemo.Models.Department
<h2>_MyView from partial view using PartialView</h2>
@if (Model != null)
{
    <div>
        <table>
            <thead>
                ....
            </thead>
            <tbody>
                <tr>
                    <td>@Model.DepartmentName</td>
                    <td>@Model.DepartmentRule</td>
                    <td>@Model.Comment</td>
                </tr>
            </tbody>
        </table>
    </div>
}

型号:

public class Department
{
    public string DepartmentName { get; set; }
    public string DepartmentRule { get; set; }
    public string Comment { get; set; }
}

public class School
{
    public List<Department>  Department { get; set; }
}  

但是,当我将Json对象传递给ajax调用时,所有其他代码保持不变,除了以下更改,部分视图将不会显示click事件。

$.ajax({
    url: '/home/ShowPartailView/',
    data: JSON.stringify(dept),
    dataType: 'json',
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    success: function (result) {
        $('#divTest').html(result);
    },
    failure: function (errMsg) {
        alert(errMsg);
    }
});

带控制器代码:

public PartialViewResult ShowPartailView(Department dept)
{
    PartialViewResult result = PartialView("_MySecondPartialView", dept);
    return result;
}

2 个答案:

答案 0 :(得分:2)

在传递对象的第二个示例中,您已指定

mysqlite3_prepare_v2()

ajax选项,但您的控制器方法返回部分视图,因此需要

mysqlite_step()

附注:您可以省略dataType: 'json', 选项,只需使用dataType: 'html',

即可

答案 1 :(得分:0)

如果您返回局部视图,请尝试在Div或任何其他元素中渲染局部视图。

$(document).ready(function () {
    $.ajax({
        url: '/YourContollerName/YourActionName',
        type: "POST"
    })
    .success(function (result) {
     $('.loadOnDivClass').empty();
     $('.loadOnDivClass').html(result);
 })
  .error(function (status) {
      alert(status);
  })

});

如果Contrller Action像这样返回

返回PartialView(&#34; _PartialList&#34;,modelObj);