【问题标题】:ASP.net MVC put complex data (array) to controller methodASP.net MVC 将复杂数据(数组)放入控制器方法
【发布时间】:2010-09-21 18:24:46
【问题描述】:

我正在将一个 ASP.net Web 窗体应用程序移植到 MVC。

应用程序通过Ajax-enabled WCF Web serviceasp:ScriptManager 使用AJAX。我发送一组对象进行服务,它处理得很好。代码示例,

    <script type="text/javascript">
    $().ready(function () {
        var ser = new Services.TasksService();
        $('#tasks').tasksgrid(
            'newTaskName',
            'createTask',
            'submitData',
            loadData,
            submitData,
            deleteData
        );

        function loadData(callback) {
            return ser.GetAllTasks(callback, null, null);
        }

        function submitData(data, callback) {
            return ser.Submit(data, callback, null, null);
        }

        function deleteData(data, callback) {
            return ser.Delete(data, callback, null, null);
        }
    }
    );

</script>

WCF 服务端代码:

    [ServiceContract(Namespace = "Services")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TasksService
{
    [OperationContract]
    public IList<Task> GetAllTasks()
    {
        //Code..
    }

    [OperationContract]
    public void Submit(IList<Task> tasks)
    {
        //Code..
    }

    [OperationContract]
    public void Delete(IList<Task> tasks)
    {
        //Code..
    }
}

提交/删除方法,接收任务对象数组。我在客户端脚本中动态创建这些数组,并将其放入相应的Services.TasksService(没有 $.toJSON 或 JSON.stringly 调用,没有类似的)。 WCF 基础设施很好地处理它,我总是在服务器上得到一个正确的对象。

现在,我正在摆脱 WCF 服务并尝试对 Controller 类做同样的事情。 GetAllTask​​s 很好..但我完全错过了“接收”数据方法。

在我拥有的控制器中,

        [HttpPost]
    public JsonResult Submit(IList<Task> tasks)
    {

在客户端,

            function submitData(data, callback) {
            $.post('/Tasks/Submit', JSON.stringify(data), callback, 'json');
        }

但是我尝试过的任何事情,我总是收到 null 作为任务对象(因此,数据未绑定)。

我见过Phil Haack post,但如果可能的话,我想避免使用任何额外的程序集。

【问题讨论】:

  • 还有什么想法吗,伙计们?正如 Phil Haack 帖子中所建议的那样,似乎只有一种解决方案是使用 MVC Futures。

标签: javascript asp.net asp.net-mvc ajax


【解决方案1】:

需要告诉 MVC 将数据绑定到服务器端的哪个变量。在您的示例中,您可以执行以下操作:

    function submitData(data, callback) {
    $.post('/Tasks/Submit', { tasks: data }, callback, 'json');
}

【讨论】:

  • 它改善了这种情况,但没有完全改善。现在,Submit 方法的'tasks' 参数不为空,但对象的所有属性都没有被初始化。请注意,JS 对象字段名称等于 C# 对象字段名称。可能有什么问题?
  • 另外,您能否链接一个材料,并解释“它如何/为什么工作”?谢谢!
  • 你能列出task C#对象和data javascript对象的结构吗?
  • 有关其工作方式/原因,请查看默认模型绑定。一般概念是“约定优于配置”方法意味着 MVC 假定在模型绑定期间应该映射匹配的对象名称和属性名称。有关您正在执行的操作的更详细示例,请查看:theycallmemrjames.blogspot.com/2010/05/…
  • Task 是一个类 Linq to SQL 生成的类。。看起来,没什么特别的,一堆属性。前面说了,属性名对应JS对象字段名。
【解决方案2】:
猜你喜欢
  • 2012-07-12
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多