【问题标题】:How to post part of the viewmodel to a Web API controller如何将部分视图模型发布到 Web API 控制器
【发布时间】:2016-01-20 12:32:31
【问题描述】:

我有一个 VB 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 视图模型?

【问题讨论】:

    标签: ajax post knockout.js asp.net-web-api2


    【解决方案1】:

    您需要对数据进行字符串化。一种方法是使用JSON.stringify,就像您所做的那样。

    大多数(但不是所有)浏览器都包含 JSON 操作函数。问题是,如果有人试图在没有此方法的浏览器中使用您的应用程序,它将崩溃。或者你必须提供一个 polyfill。

    好消息是,如果您使用ko.toJSON,则无需担心。事实上ko.toJSON 做了两件事:

    • 解开所有可观察对象(如果存在)
    • 使用JSON.stringify转换为JSON

    这意味着这两个选项都可以正常工作:

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

    请注意,第二个属性会自动展开。如果你取了一部分视图模型,它是一个对象树,其中包含任何级别的一些可观察属性,ko 也会自动解包它们。

    而且,最重要的是,如果浏览器没有实现JSON.stringify,ko 会提供自己的实现。

    【讨论】:

      【解决方案2】:

      是的,stringify 处理了它。它现在正在使用。

      data:  JSON.stringify({ShpmntCntrlNbr : self.ShpmntCntrlNbr() }),
      

      【讨论】:

        猜你喜欢
        • 2018-11-19
        • 2019-10-31
        • 2012-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多