JSON.stringify中丢失的值在$ .ajax函数中

时间:2016-05-16 07:30:37

标签: jquery json ajax asp.net-mvc stringify

 <script>
    $(document).ready(function () {                 
        $("#btnPost").click(function () {
            var sof = {
                EndUserIp: "192.168.10.10",
                TokenId: $("#pageInitCounter").val(),
                AdultCount: $("#AdultCount").val(),
                ChildCount: $("#ChildCount").val(),
                InfantCount: $("#InfantCount").val(),
                DirectFlight: "false",
                OneStopFlight: "false",
                JourneyType: $("#JourneyType :selected").text(),
                PreferredAirlines: null,         
            }
          alert(JSON.stringify(sof));
            $.ajax(
                {
                    url: "/api/Flight/SearchFlight",
                    type: "Post",
                    contentType: "application/json",
                    data: JSON.stringify(sof),
                    success: function (result) {
                        alert(result);
                    }
                });        
        });
    });
  </script>

这是Script tage中的简单代码。有一个json Object数组。我将它命名为sof.I我通过Id选择器初始化每个对象的值,点击每个文本框,下拉列表等事件。

现在,你可以看到在sof json数组之后有一个警告框。

   alert(JSON.stringify(sof));

显示正确的值,无论在下拉列表中选择了什么。

但问题出现在$ .Ajax函数调用。 我想将Json数组返回到函数中声明的url但是当我将鼠标悬停在sof上时,奇怪的是文本框中的某些值是正确的,但是从JourneyType下拉,它返回null。

还有一件事,因为警报框正在返回所有正确的值但是当我在警报框关闭后将鼠标悬停在警告框中的sof上时,我可以看到文本框值正确但是下拉值(JourneyType)为空现在,它是如何发生的,因为警报框已经显示我选择了正确的下拉值。

这是我简单的下拉菜单:

 @Html.DropDownListFor(model => model.JourneyType, Model.JourneyList, new {id = "JourneyType"})

请有人告诉我这里发生了什么。 这是完整的html渲染。我从视图源复制了代码。

   <div class="form-group">
     <label class="control-label col-md-2" for="DepartmentID">Journey Type</label>
        <div class="col-md-10">
          <select id="JourneyType" name="JourneyType"><option value="0">OneWay</option>
 <option value="1">Return</option>
 <option value="2">MultiStop</option>
 <option value="3">AdvanceSearch</option>
 <option value="4">SpecialReturn</option>
 </select>
 <span class="field-validation-valid text-danger" data-valmsg-for="JourneyType" data-valmsg-replace="true"></span>
           </div>
       </div>

这是模型类:

    public enum JourneyType
{
    OneWay, Return, MultiStop, AdvanceSearch, SpecialReturn
}
public enum FlightCabinClass
{
    All, Economy, PrimiumEconomy, Business, PremiumBusiness, First
}
public class SearchForFlight
{
    public SearchForFlight()
    {
        JourneyList = new List<SelectListItem>();
        FlightCabinClassList = new List<SelectListItem>();
    }
    public string EndUserIp { get; set; }
    public string TokenId { get; set; }
    public int AdultCount { get; set; }
    [JsonIgnore]
    public IEnumerable<SelectListItem> JourneyList { get; set; }

    public int ChildCount { get; set; }
    public int InfantCount { get; set; }
    public bool DirectFlight { get; set; }
    public bool OneStopFlight { get; set; }
    public Enum JourneyType { get; set; }
    public string PreferedLines { get; set; }
    public string Origin { get; set; }
    public string Destination { get; set; }
    public Enum FlightCabinClass { get; set; }
 //   [DataType(DataType.Date)]
    public DateTime PreferredDepartureTime { get; set; }
//    [DataType(DataType.Date)]
    public DateTime PreferredArrivalTime { get; set; }
    [JsonIgnore]
    public IEnumerable<SelectListItem> FlightCabinClassList { get; set; }
    public string Sources { get; set; }

}

1 个答案:

答案 0 :(得分:0)

首先,请问StephenMuecke先生。 由于返回值错误,我的代码中存在一个小错误。 将JourneyType属性的返回类型从枚举更改为JourneyType后,everthing工作正常。

    public JourneyType JourneyType { get; set; }

    public Enum JourneyType { get; set; }