我正在将一些处理后的用户请求从mvc视图发送到控制器和控制器,并将结果作为json对象发送回视图。 我当前的解决方案工作,但我想在视图端渲染html元素,而不是在js函数中(现在是)。
function GetTabData(xdata) {
$.ajax({
url: ('/Home/GetData'),
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ id: xdata }),
success: function (result) {
var data = null;
data = '<div class="list-products clearfix">
data += '<a href="/Home/MyData/' + item.Id + '">
....
}
所以我想删除所有这些div和其他html元素并发送纯数据并在视图上格式化,我该怎么做?
答案 0 :(得分:2)
那么,让控制器操作返回一个PartialView
,其中包含即将使用的 HTML片段,而不是JsonResult:
public ActionResult GetData()
{
MyViewModel model = ...
return PartialView(model);
}
现在你需要在成功回调中做的就是使用jQuery的.html()
函数:
success: function (data) {
$('#someContainingDiv').html(data);
}
然后您将拥有一个相应的局部视图(~/Views/Home/GetData.cshtml
),该视图将强烈键入视图模型并呈现相应的HTML:
@model MyViewModel
<div class="list-products clearfix">
@Html.ActionLink("click me", "MyData", "Home", new { id = Mode.Id }, null)
...
正如您所看到的,这允许您使用可生成正确标记和网址的HTML帮助程序,而在您的原始示例中,您在锚标记中对网址进行了硬编码,例如/Home/MyData
,这实际上是一件非常糟糕的事情
您应该真正找到从AJAX请求调用的控制器操作发送的纯JSON数据与发送包含标记的部分视图之间的平衡。如果您发现自己在AJAX成功回调中使用了大量字符串连接以构建一些HTML标记,那么您应该切换服务器端逻辑以直接返回所需的HTML。