日期不是由Ajax在Jquery中使用序列化数据提交的

时间:2015-12-17 11:55:40

标签: c# jquery ajax asp.net-mvc

我正在Ajax请求中使用Jquery在Controller中发送数据,所有字段都很好@controller,但只有一个字段Date(“ AffectedDate ”)没有到来。
任何人都可以告诉我哪里错了?

JQuery代码:

function saveData() {
    var data = $("#editForm").serialize();
    $.ajax({
        type: 'GET',
        url: '/Controller/SaveTaxRate/',
        data: data,
        success: function (result) {
            alert('success');
        },
        error: function (jqXHR) {
            alert('failure');                
        }
    })
}

.Cs模型

public class TaxRateModel
{
    public int CountryId { get; set; }
    public string CountryName { get; set; }
    public double? Taxes { get; set; }
    public float? AffectedTaxRate { get; set; }
    public Nullable<System.DateTime> AffectedDate { get; set; }
}

控制器代码:

public bool SaveTaxRate(TaxRateModel taxRateModel)
{
     // My Code here..
}

HTML代码:

<div class="row-fluid">
  <div class="span12">
      <div class="span3">
          <p><strong>Country: </strong></p>
      </div>
      <div class="span5">
          @Html.TextBoxFor(Model => Model.CountryName, new { @placeholder = "Change the Country Name" })
      </div>
  </div>
</div>
<div class="row-fluid">
    <div class="span12">
        <div class="span3">
            <p><strong>Tax-Rate: </strong></p>
        </div>
        <div class="span5">
            @Html.TextBoxFor(Model => Model.Taxes, new { @placeholder = "Chnage the Tax-Rate", @id = "TaxRate" })
        </div>
    </div>
</div>
<div class="row-fluid">
    <div class="span12">
        <div class="span3">
            <p><strong>Affected Tax-Rate: </strong></p>
        </div>
        <div class="span5">
            @Html.TextBoxFor(Model => Model.AffectedTaxRate, new { @placeholder = "Change the TaxRates" })
        </div>
    </div>
</div>
<div class="row-fluid">
    <div class="span12">
        <div class="span3">
            <p><strong>Affected Date: </strong></p>
        </div>
        <div class="span5">
            @Html.TextBoxFor(model => model.AffectedDate, "{0:dd/MM/yyyy}", new { @placeholder = "Change the Affected Date" })                                        
        </div>
    </div>
</div>

2 个答案:

答案 0 :(得分:2)

DateTime的解析发生了对Formvalues的文化感知。

检查CultureInfo.CurrentCulture中的内容

以下是框架中的代码:

if (rawValue == null && request.Form != null)
{
    culture = CultureInfo.CurrentCulture;
    rawValue = request.Form.GetValues(name);
}

http://weblogs.asp.net/melvynharbour/mvc-modelbinder-and-localization

如果您需要更改此行为,可以通过提供自己的Modelbinder来实现:

ModelBinders.Binders.Add(typeof(DateTime), new MyModelBinder());

也在http://weblogs.asp.net/melvynharbour/mvc-modelbinder-and-localization

修改

因为请求是通过get发送的,参数是在查询字符串中传递的,所以使用不变文化来解析日期。

使用框架的这一部分

 CultureInfo culture = CultureInfo.InvariantCulture;

 if (request.QueryString != null)
 {
     rawValue = request.QueryString.GetValues(name);
 }

我猜你应该尝试回答并使用帖子。

答案 1 :(得分:2)

试试这个。我用过它。

var data = new FormData($("#editForm").get(0));
$.ajax({
    type: "POST",
    url: '/Controller/SaveTaxRate/',
    data: data,
    dataType: "json",
    contentType: false,
    processData: false,
    success: function (result) {
        alert('success');
    },
    error: function (jqXHR) {
        alert('failure');                
    }
})

而不是

var data = $("#editForm").serialize();