ASP.NET MVC 3 - 我们能在jQuery AJAX调用中使用模型绑定吗?

9
如果我有以下jQuery函数(在外部文件中):
function getResults(field1, field2, field3) {
   $.get('/Search/GetResults', { id: field1, type: field2, blah: field3 }, function(data) {
      $('#target').html(data);
   });
}

这实质上是从表单中取出一堆字段,将它们发送到一个操作方法(该方法返回PartialViewResult),并将结果绑定到目标div。

以下是该操作方法:

[HttpGet]
public PartialViewResult GetResults(int id, int type, string blah)
{
   var model = repository.GetResults(id, type, blah);
   return PartialView("Results", model);
}

这里可以使用模型绑定吗?例如,我们可以这样做:

function getResults(someModel) {
   $.get('/Search/GetResults', { model: someModel }, function(data) {
      $('#target').html(data);
   });
}

And this:

[HttpGet]
public PartialViewResult GetResults(SearchPreferences prefs)
{
   var model = repository.GetResults(prefs);
   return PartialView("Results", model);
}

或者我应该构建一个JSON对象并传递它?目前这些值是通过单独的jQuery DOM调用检索的。
var field1 = $('#field1').val();
var field2 = $('#field2').val();

目标是简化/减少jQuery代码。我需要调用所有值,然后将它们全部作为参数传递。

理想情况下,我只想传递一个对象。

有什么建议吗?

编辑:刚刚意识到我可以使用ASP.NET MVC 3中的新JSON模型绑定功能。现在正在阅读相关信息...(同时请随时回答)。

2个回答

4
在ASP.NET MVC 3中,是的!可以查看TheGu本人的这个链接。此外,ASP.NET MVC 3现在包含了内置支持从客户端JavaScript通过JSON参数传递到服务器上的操作方法,这使得在客户端和服务器之间更容易交换数据,并构建丰富的JavaScript前端。

哈哈,我刚刚加了这个编辑,并且正在阅读我们在说的同一篇帖子。 :) - RPM1984
不错...有时我也会这样做! - Chaddeus
您可能还想查看http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx。 - Chaddeus
恭喜,很高兴我能够"帮忙"。v3中的新MVC升级非常棒。我迫不及待地想深入了解JSON模型绑定功能。 - Chaddeus
太棒了。我仍然需要构建JSON对象,这不是什么大问题,但我喜欢模型绑定“只是运行”。MVC基于约定的特性可以说是它最好的功能。 - RPM1984

1
如果您创建一个包含要发送的属性的类,那么默认的模型绑定器将会启动并将数据绑定到该类。在您的示例中,创建一个类:
public class SearchPreferences 
{
  public int id { get; set; }

  public int type { get; set; }

  public string blah { get; set; }
}

然后在你的操作中可以这样写:

[HttpGet]
public PartialViewResult GetResults(SearchPreferences prefs)
{
   var model = repository.GetResults(prefs);
   return PartialView("Results", model);
}

关键是确保你在$.get数据中的名称和SearchPreferences类中的名称匹配。

是的,我知道那个 - 我确实有那个类。但是,用这种方法,我仍然需要传递所有单独的参数,而这正是我试图避免的。 - RPM1984

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接