我有以下情况,我有一个,我使用以下代码使用ajax提交:
$("#cmdAjaxSave").click(function (evt) {
evt.preventDefault();
var $form = $('#frmItem');
if ($form.valid()) {
ajaxSave();
}
});
function ajaxSave() {
if (!onBeforeSubmit()) return; //item is not valid, so the ajax call should not be executed
//var token = $('[name=__RequestVerificationToken]').val();
popup('ajaxSplash');
$.ajax({
type: "POST",
url: '@Url.Action("Index")',
data: $("#frmItem").serialize(),
success: function (html) {
//console.log(html);
$("#formDiv").empty();
$("#formDiv").append(html);
initItemPage();
alert("Item was saved successfully");
},
error: function () { popup('ajaxSplash'); onFailure(); }
});
}
我在这里看到的问题是,即使“frmItem”在我到达客户端时返回“true”,ModelState也无效。特别是对于三个实际具有正确值的属性。
深入研究最初编码的开发人员所做的代码,我发现了这个属性:
@Html.TextBoxFor(model => model.Item.Service.CPC_BW, htmlAttributes: new { @class = "Text", @onkeyup = "validItem();", @id = "SrvCPCBlk" })
实际上是这样定义的:
private double _CPC_BW;
[Required]
[Range(0, 100000, ErrorMessage = "CPC value required")]
public string CPC_BW { get { return String.Format("{0:F}", _CPC_BW); } set { _CPC_BW = Convert.ToDouble(value); } }
我认为他这样做是因为TextBoxFor没有提供一种明显的方式来格式化数字,即使它看起来很可疑,我也不知道这怎么会导致错误。
表单的Html就像这样呈现
<div id="itemPopUpForm">
@{Html.EnableClientValidation();}
<div id="formDiv">
@{ Html.RenderPartial("ItemData", Model, new ViewDataDictionary() { { "Machines", ViewBag.Machines }, { "WarehouseList", ViewBag.WarehouseList }, { WebConstants.FORM_ID_KEY, @ViewData[WebConstants.FORM_ID_KEY] } }); }
</div>
</div>
部分视图包含在ajax请求中提交的表单。
答案 0 :(得分:0)
我认为你应该尝试清除模型状态,然后测试它是否有效......
这是一个常见问题。
ModelState.Clear();
ModelState.IsValid();