【发布时间】:2015-03-23 17:44:41
【问题描述】:
我正在尝试通过在文本框失去焦点时读取后端数据库来验证输入网页的代码是否有效。我能够在控制器中执行代码,但由于某种原因模型对象没有被传递给控制器方法。
文本框定义...
<div class="form-group">
@Html.LabelFor(m => m.HSDRepCode)
@Html.TextBoxFor(m => m.HSDRepCode, new { placeholder = "Enter your HSD Rep code...", @class = "contact-name"})
@Html.ValidationMessageFor(m => m.HSDRepCode)
</div>
模糊事件的 javascript 代码...
<script type="text/javascript">
$("#HSDRepCode").blur(function () {
var model = '@Html.Raw(Json.Encode(Model))';
$.ajax({
url: "/CRM/ValidateHSDRep",
type: "POST",
data: $("model").serialize(),
dataType: "application/json"
}).done(function( model ) {
$("#HSFirstName").val(model.HSFirstName);
$("#HSLastName").val(model.HSLastName);
});
});
</script>
CRM 控制器代码...
public ActionResult ValidateHSDRep(LeadInfo leadInfo)
{
HSDRep hsdRep = new HSDRep();
hsdRep = CRMModels.ValidateHSDRepCode(leadInfo.HSDRepCode);
return Json(leadInfo);
}
控制器代码被执行,但是在输入HSDRepCode并跳到下一个文本框后leadInfo对象全部为空。
为什么没有将模型传递给控制器代码?
谢谢, 加里
【问题讨论】:
-
当您只需要一个属性时,为什么还要发回整个模型?但是,如果您确实想降低性能,那么使用
data: $('form').serialize(),回发控件中的值。 -
我要返回整个模型,因为我想返回两个附加值。如果有更好的方法,我想知道它是什么。谢谢
-
只发回你需要的东西——
data: $(this).val(),,只返回你需要的东西——return Json(new {firstName = leadInfo.HSFirstName ,lastName: leadInfo.HSFirstName }, JsonRequestBehavior.AllowGet)——性能要好得多。 (它是 GET,而不是 POST)
标签: javascript asp.net-mvc validation unobtrusive-validation