将json结果发送到mvc视图

时间:2012-12-26 14:51:10

标签: jquery json asp.net-mvc

我正在将一些处理后的用户请求从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元素并发送纯数据并在视图上格式化,我该怎么做?

1 个答案:

答案 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。