【问题标题】:ASP.NET MVC 3 - Can We Use Model Binding Over jQuery AJAX Calls?ASP.NET MVC 3 - 我们可以在 jQuery AJAX 调用上使用模型绑定吗?
【发布时间】:2011-06-12 20:48:05
【问题描述】:

如果我有以下 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);
   });
}

还有这个:

[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 模型绑定 功能。现在阅读它......(感觉在此期间可以提前回答)。

【问题讨论】:

    标签: jquery asp.net-mvc json asp.net-mvc-3 model-binding


    【解决方案1】:

    在 ASP.NET MVC 3 中,是的!查看来自 TheGu 本人的 this link

    ASP.NET MVC 3 现在包括内置 支持发布基于 JSON 的 来自客户端的参数 JavaScript 上的操作方法 服务器。这使得更容易 在客户端之间交换数据和 服务器,并构建丰富的 JavaScript 前端。

    【讨论】:

    • 大声笑,我刚刚添加了那个编辑,并且正在阅读我们所说的同一篇文章。 :)
    • 很好......我有时也会做同样的事情!
    • 您可能还想查看haacked.com/archive/2010/04/15/…
    • 恭喜,很高兴我能“帮忙”。 v3 中的新 MVC 升级很棒。我也迫不及待地想深入研究 JSON 模型绑定功能。
    • 太棒了。我仍然需要构建 JSON 对象,这没什么大不了的,但我喜欢模型绑定“正常工作”的方式。 MVC 基于约定的特性可以说是它的最佳特性。
    【解决方案2】:

    如果您创建一个包含要发送的属性的类,默认模型绑定器将启动并将数据绑定到该类。在您的示例中,创建一个类:

    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 数据中的名称与您的 SerachPreferences 类中的名称相匹配。

    【讨论】:

    • 是的,我知道这一点——而且我确实有这个课程。但是使用这种方法,我仍然需要传递所有单独的参数,这是我试图避免的。
    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2013-12-08
    • 1970-01-01
    相关资源
    最近更新 更多