C# 如果asp.net mvc中的浮点文本框为空,如何使表中的字段为null而不是零

C# 如果asp.net mvc中的浮点文本框为空,如何使表中的字段为null而不是零,c#,sql,asp.net-mvc,knockout.js,odata,C#,Sql,Asp.net Mvc,Knockout.js,Odata,我开发了一个Asp.NETMVC4应用程序,其中我处理了几个文本框,通过这些文本框,我可以使用knockout和OData将数据输入sql表。现在我有两个文本框,它们将浮点数据发送到数据库表,有时当我将这些文本框留空时,它们将输入作为表中的零,当我将它们留空时,如何使它们为NULL而不是零 我有以下几行代码 HTML <table class="addSection"> <thead> <tr> <td&g

我开发了一个Asp.NETMVC4应用程序,其中我处理了几个文本框,通过这些文本框,我可以使用knockout和OData将数据输入sql表。现在我有两个文本框,它们将浮点数据发送到数据库表,有时当我将这些文本框留空时,它们将输入作为表中的零,当我将它们留空时,如何使它们为NULL而不是零

我有以下几行代码

HTML

<table class="addSection">
    <thead>
        <tr>
            <td>

                <select data-bind="options: $root.productNames, optionsText: 'ProductName', optionsValue: 'ProductName', value: selectedChoice, optionsCaption: 'Product'">
                </select>
            </td>
           <td>

                <select data-bind="options: $root.termNames, optionsText: 'TermName', optionsValue: 'TermName', value: selectedTerm, optionsCaption: 'Term'">
                </select>
            </td>


             <td>

                <select data-bind="options: $root.locationNames, optionsText: 'LocationName', optionsValue: 'LocationName', value: selectedLocation, optionsCaption: 'Location'">
                </select>
            </td>

            <td>

                <select data-bind="options: $root.pipelineNames, optionsText: 'PipelineName', optionsValue: 'PipelineName', value: selectedPipeline, optionsCaption: 'Pipeline'">
                </select>
            </td>



             <td>

                <select data-bind="options: $root.indexNames, optionsText: 'IndexName', optionsValue: 'IndexName', value: selectedIndex, optionsCaption: 'Index'">
                </select>
            </td>

            <td>

                <select data-bind="options: $root.counterpartyNames, optionsText: 'CounterPartyName', optionsValue: 'CounterPartyName', value: selectedBidCounterParty, optionsCaption: 'Bid CP'">
                </select>
            </td>

            <td>

                <select data-bind="options: $root.counterpartyNames, optionsText: 'CounterPartyName', optionsValue: 'CounterPartyName', value: selectedOfferCounterParty, optionsCaption: 'Offer CP'">
                </select>
            </td>

            <td>
                <input type="text" placeholder="Bid Volume"  data-bind="value: bidVolume" />
            </td>

              <td>
                <input type="text" placeholder="Bid" data-bind="value: bid" />
            </td>

              <td>
                <input type="text"  placeholder="Offer" data-bind="value: offer" />
            </td>

              <td>
                <input type="text" placeholder="Offer Volume" data-bind="value: offerVolume" />
            </td>

            <td >
                <input type="button" class="btn btn-success" data-bind="click: add, enable: selectedChoice" value="Add New Entry" />
            </td>
        </tr>
    </thead>
</table>

在上面的HTML表中,出价和出价都是浮动的,其余的字段是字符串,当我离开字符串控件空时,他们认为它是NULL,但是当我离开FLASH控件空时,它们将零作为输入。


我可以知道处理此问题的更好方法吗?

您可以在viewmodel中为浮点数据类型使用computed

self._bid = ko.observable();
self.bid = ko.computed({
  read:function() { 
    return self._bid ();
  },write:function(val) { 
    if(val === "") { 
      val = null;
    }
    self._bid(val);
  }})
或者


午餐时有另一个想法-也许,如果我的另一个答案不起作用,简单地将.cs模型中的bid属性定义类型更改为null就可以了。例如,因为我不知道你的模型是什么样子。也许有更好的方法可以做到这一点,例如修改odata使用的“模型绑定器”……这可能根本不是一个令人扫兴的问题

public float Bid {get;set;}
那么应该是

public float? Bid {get;set;}

谢谢,我如何将计算出的值发送到视图模型中的add函数?与您已经使用的方法完全相同。self.bid是一个读/写计算的可观察对象,其行为与真实的可观察对象完全相同。因此,您无需更改任何内容,只需引用它,如
self.bid()
如果您有一个带有自定义绑定、扩展名或您自己的实用程序的js文件,请将nullifemptyobs放入其中,如下所示
ko.nullifemptyobs=function(initialValue){//rest of function here}self.bid=ko.nullIfEmptyObs()
。不过,请确保在加载了knockout之后加载该代码段。请尝试一下,谢谢
public float Bid {get;set;}
public float? Bid {get;set;}