2013-05-03 116 views
3

我有一个我创建的dnn模块,使用WebAPI从服务器检索数据没有问题。但是,当我尝试执行更新时,无论我尝试什么,我都会继续收到错误。在Firebug看,我可以张贴的数据:如何执行DotNetNuke WebAPI更新/删除?

http://www.virtual-essentials.com/personal/firebug1.png

但是,当我调试,我看到的只是默认(null.setnull)值(布尔=假,INT = 0,串=空)。

然后,当然的反应是这没有什么好和结果: (http://www.virtual-essentials.com/personal/firebug2.png

我试过的事情,我能想到的每一种组合,但不能得到这个想通了,我快疯了。

这里是AJAX调用: // //Ü操作 - 更新 self.updateTestimonial =函数(objItem){ VAR方法= “UpdateTestimonial”; self.UpdatePublishStatus(objItem);

$.ajax({ 
     type: "POST", 
     contentType: "application/json", 
     url: sf.getServiceRoot('VirtualEssentials/Testimonials') + "TestimonialWeb/" + method, 
     beforeSend: sf.setModuleHeaders, 
     data: ko.toJSON({ item: new TestimonialInfoDTO(objItem.TestimonialID(), objItem.IsPublished())}), 
     success: function (data) { 
      self.userAlertText(objItem.Testimonial() + ' changes have been saved'); 
      //self.getTestimonials(); //get the new data after updates 
     }, 
     error: function (xhr, status, error) { 
      self.userAlertText('OOPS! Error updating ' + objItem.Testimonial + '<br />' + (error)); 
      //put the status back 
      self.UpdatePublishStatus(objItem); 

     } 
    }); 
}; 

这里是的WebAPI控制器电话:

[HttpPost] 
    [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)] 
    public System.Net.Http.HttpResponseMessage UpdateTestimonial(TestimonialInfoDTO item) 
    { 
     try 
     { 
      Controller.TestimonialController objController = new Controller.TestimonialController(); 
      objController.PublishTestimonial(item.TestimonialID, item.IsPublished); 
     } 
     catch (HttpResponseException ex) 
     { 
      return ex.Response; 
     } 

    } 

任何帮助是真诚的感谢!

回答

3

一旦你寻求帮助,你永远无法找到解决方案。我拉取了核心期刊模块的源代码,发现他们发布的帖子数据有点不同。我修改了我发送的json字符串,这一切都经过了。我想,既然该方法的参数是:

UpdateTestimonial(TestimonialInfoDTO item) 

,它期待:

{"item":{"TestimonialID":14,"IsPublished":false}} 

但是,事实证明它真正想要的是:

{"TestimonialID":14,"IsPublished":false} 

总之,在这里就是我所做的改变;我只是改变了构建要发布的数据的方式。

var data = new TestimonialInfoDTO(objItem.TestimonialID(), objItem.IsPublished()); 

    $.ajax({ 
    ... 
    data: ko.toJSON(data), 

我希望这可以帮助别人。目前没有很多Dnn WebAPI文档。

谢谢! Briana