我正在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>
答案 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();