2016-01-20 73 views
0

我有一個VB Web API應用程序。如何將視圖模型的一部分發布到Web API控制器

我有一個像這樣的VB類/模型。

Imports System.ComponentModel.DataAnnotations 
Imports System.Web.Http 
Public Class MSLDestinationInput 
    <HttpBindRequired> 
    <Required> 
    Public Property ShpmntCntrlNbr() As String 
     Get 
      Return m_ShpmntCntrlNbr 
     End Get 
     Set(value As String) 
      m_ShpmntCntrlNbr = value 
     End Set 
    End Property 
    Private m_ShpmntCntrlNbr As String 
End Class 

這是控制器:

Public Async Function GeneratePDF(data As MSLDestinationInput) As Task(Of IHttpActionResult) 
      If Not ModelState.IsValid Then 
      Return BadRequest(ModelState) 
     End If 
     Dim oMSLOutput As New MSLOutput 
     oMSLOutput.url = "api/PrintGenerateMSL" 
     Return Ok(oMSLOutput) 
    End Function 

我張貼使用jQuery.ajax這個參數控制器:

url: 'api/PrintGenerateMSL', 
data: ko.toJSON(self), 
type: "POST", 

,一切運作良好。不過,我並不需要發送整個淘汰賽模式。我只需要發送一些屬性。我試圖發送這些數據:

data: {ShpmntCntrlNbr : self.ShpmntCntrlNbr() }; 

而不是ko.toJSON(self)。當請求到達我的控制器時,我發現參數data爲空。 如何只將所需的數據發送到我的控制器而不是整個ko視圖模型?

回答

1

您需要將數據串聯起來。一種方法是使用JSON.stringify,就像你所做的那樣。

大多數但不是所有的瀏覽器都包含JSON操作函數。問題是,如果有人試圖在沒有這種方法的瀏覽器中使用你的應用程序,它會崩潰。或者你必須補充一個polyfill。

好消息是,你不必擔心,如果你使用ko.toJSON。事實上ko.toJSON做了兩兩件事:

  • 解開所有的觀測值(如果存在)
  • 轉換成JSON,通過使用JSON.stringify

這意味着,雙方的這個選項會很好地工作:

data: ko.ToJSON({ShpmntCntrlNbr : self.ShpmntCntrlNbr() }) 
data: ko.ToJSON({ShpmntCntrlNbr : self.ShpmntCntrlNbr }) 

注意,在第二個屬性將被自動解開。如果你把一塊viewmodel作爲一個包含一些可觀察屬性的對象樹,ko也會自動解包它們。

而且,最重要的是,如果瀏覽器不實現JSON.stringify,KO防阻它自己的實現。

1

yes stringify照顧了它。它現在正在工作。

data: JSON.stringify({ShpmntCntrlNbr : self.ShpmntCntrlNbr() }), 
相關問題