2012-09-12 37 views
0

所以问题如下:我有一个返回json的操作方法。我需要做的是使用该json来构建一些基于它的html。例如,让我说我收到一辆汽车列表。我想要做的是例如显示列表如下:使用json创建html的最佳方法

<div id="cars"> 
@foreach(var car in Model) 
{ 
    <p>car.Name</p> 
} 
</div> 

<div id="pageLinks"> 
    @Html.MyPageLinks(Model.PageInfo) 
</div> 

目前,这是一个视图,我要做的就是呈现在控制器视图,并返回整个结果作为JSON结果(检查this link)。一切都很好,但有一个主要缺点 - 操作方法不可测试,因为我必须模拟大量的事情才能使FindPartialView工作(并且目前我坚持这一点)。更糟糕的是,我将观点与行动相结合,即对观点的改变也会损害单元测试,这是不可接受的。

另一方面,使用JavaScript生成所有的HTML似乎是一个非常糟糕的做法,因为它将是很多原始的JavaScript和jQuery(请记住,即使在我简化的例子中,会有很多js和我将失去测试MyPageLinks的选项,因为一切都将是js)。

我需要/想要做的只是返回json(只是数据对象,没有html),并在视图中有一个类似于模板的东西,一旦返回json就会被应用。

回答

1

只需从控制器操作中返回HTML而不是JSON。这样就把视图片断你带进一个部分包裹一个div内:

<div id="paginatedCars"> 
    @Html.Partial("Cars") 
</div> 

再有,你是调用返回此更新部分的控制器动作。

+0

我没有完全明白这一点。该页面使用ajax请求,例如:第一个操作方法是普通ViewResult,它显示进行搜索所需的所有数据。然而,搜索按钮调用一些js,它连接到服务器并调用第二个操作方法,它是一个JsonResult,并异步更新第一个View。 – Unknown

+0

这不是一个问题 - 你触发AJAX请求到一个返回PartialView的控制器动作,并且在AJAX请求的成功回调中,你只需刷新DOM:'$('#paginatedCars')。html(result)'其中'result'显然是您用AJAX调用的控制器操作返回的部分HTML。这种情况下你不需要任何JSON。 –

+0

我是一个完全白痴。开发过程中,过分复杂的东西似乎是一个严重的缺陷。非常感谢你的帮助。 – Unknown