2013-06-05 50 views
1

我一直在努力过滤日志条目的列表,并且我正在接近完成。MVC - 通过AJAX +控制器异步刷新视图模型?

我想知道是否有可能通过$.ajax()异步更新当前视图的模型。

我目前有$.ajax()工作,但它返回整个页面的HTML而不是局部视图或模型本身。

有没有人知道在当前视图中更新模型的方法?

+0

如果你返回一个模型,你的JS将不知道如何把它放到HTML中。 – SLaks

+0

您必须以json格式返回模型,并使用js模板功能来替换服务器在dom中呈现的html。 – WestDiscGolf

+0

显示一些代码!你可以让一些逻辑将最后的结果作为JSON返回,并使用ajax将这个结果附加到页面上!但@SLaks说,你需要一些JavaScript逻辑来做到这一点! – Fals

回答

1

您必须以json格式返回模型并使用js模板 功能来替换服务器在dom中呈现的html。 - WestDiscGolf

上面是解决方案,所以我会保持它的简单,使用更传统的方法。

0

您可以简单地使用Knockout。在这种情况下,不需要重新发明轮子。

1

这个概念没有意义。一旦页面被渲染,模型就不再存在,直到它在下面的POST中被重新实例化(假设它被重新实例化,即您的控制器操作接受相同类型的参数)。同时,它只表现为表格字段,其name属性对应于模型的属性。

但是,您可以动态创建表单字段,当表单发布后,它们将(如果可能)再次映射回模型属性。

<input type="hidden" id="hdnMyProperty" name="MyProperty" /> 

然后使用jQuery来填充字段的值:

var property = /* Your returned value here */; 
$('#hdnMyProperty').val(property); 

有一对夫妇的常用方法

创建一个域,其name属性模型属性的名称相匹配实现此目的:

  1. 向控制器操作发出AJAX请求,返回JsonResult并动态地在您的Javascript中创建表单域(可能 - 如前所述 - 利用Knockout之类的东西)。
  2. 创建一个控制器动作,返回一个PartialViewResult并将返回的标记动态插入适当的位置。

当您发出下一个发布请求时,模型联编程序会尝试将其映射到新实例化模型中的相应属性。