我有一个VB Web API应用程序。
我有一个像这样的VB类/模型。
Type Description
---- -----------
int integer of arbitrary size
float floating point number
bool boolean value
str unicode string
bytes 8-bit string
object an arbitrary object (object is the common base class)
List[str] list of str objects
Dict[str, int] dictionary from str keys to int values
Iterable[int] iterable object containing ints
Sequence[bool] sequence of booleans
Any dynamically typed value with an arbitrary type
这是控制器:
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",
而不是ko.toJSON(自我)。当请求到达我的控制器时,我发现参数data: {ShpmntCntrlNbr : self.ShpmntCntrlNbr() };
为空。
如何只将所需数据发送到我的控制器而不是整个ko视图模型?
答案 0 :(得分:1)
是的,stringify会照顾它。它现在正在使用。
data: JSON.stringify({ShpmntCntrlNbr : self.ShpmntCntrlNbr() }),
答案 1 :(得分:1)
您需要对数据进行字符串化。一种方法是使用JSON.stringify
,就像你已经完成的那样。
大多数(但不是所有浏览器)都包含JSON操作函数。问题是如果有人试图在没有这种方法的浏览器中使用你的应用程序,它就会崩溃。或者你必须完成一个填充物。
好消息是,如果您使用ko.toJSON
,则不必担心。实际上ko.toJSON
做了两件事:
JSON.stringify
这意味着这两个选项都可以正常工作:
data: ko.ToJSON({ShpmntCntrlNbr : self.ShpmntCntrlNbr() })
data: ko.ToJSON({ShpmntCntrlNbr : self.ShpmntCntrlNbr })
请注意,第二个属性将自动解包。如果你拍摄了一个视图模型,它是一个包含任何级别的一些可观察属性的对象树,ko也会自动解包它们。
而且,最重要的是,如果浏览器没有实现JSON.stringify
,则ko会提供自己的实现。