我需要将模型对象传递给控制器,并从那里调用服务以生成局部视图的数据。我能够将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;
}
答案 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);