0

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

4

1 回答 1

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 帮助程序来生成正确的标记和 URL,而在您的原始示例中,您在锚标记中硬编码 URL,例如/Home/MyData这确实是一件非常糟糕的事情。

您应该真正找到从由 AJAX 请求调用的控制器操作发送的纯 JSON 数据与发送包含标记的部分视图之间的平衡。如果您发现自己在 AJAX 成功回调中使用了大量字符串连接来构建一些 HTML 标记,那么您可能应该切换服务器端逻辑以直接返回所需的 HTML。

于 2012-12-26T14:52:45.573 回答