我有一个C#ASP.net MVC 4.5解决方案。我想创建一个具有自动地址验证的表单。 如果您输入邮政编码和housenumber,则使用外部REST API查找城市名称。
填写住宅编号后,必须调用控制器中的函数(使用AJAX)查找地址,更新模型数据并在表单中显示结果。我无法弄清楚如何做到这一点。
我正在考虑在调用来自housenumber的onBlur时触发一个表单(使用AJAX)。但这是最好的方法吗?回帖整个表格真的是最好的方法吗?
到目前为止的例子:
<div class="col-md-7">
@Html.TextBoxFor(model => model.HouseNumber, new { @class = "form-control", @placeholder = "HouseNumber" })
@Html.ValidationMessageFor(model => model.HouseNumber, null, new { @class = "text-danger" })
</div>
当TextBox HouseNumber失去焦点时,我想在我的控制器'AddressBook'中调用函数'ValidateAddress'。该函数将查找街道名称和城市,并将填充model.Streetname和model.City字段。
答案 0 :(得分:1)
您可以在HouseNumber文本框中使用模糊事件
试试这个
@Html.TextBoxFor(model => model.HouseNumber, new { @class = "form-control", @placeholder = "HouseNumber" onblur = "alert('call some javascript function')"})
或
更好地使用jquery函数
<强>更新强>
$("#HouseNumber").blur(function () {
$.get("ControllerName/ActionMethod",{parameterName:value},function(data){
// extract values from data object and assign ut to your controls
});
});
答案 1 :(得分:1)
好吧,您可以更改控制器操作以将模型作为JSON返回:
public ActionResult ValidateAddress(YourModel model){
// Do your validation
return Json(model);
}
然后为此操作添加一个AJAX调用并在回调中填写表单:
$( "#HouseNumber" ).blur( function() {
$.ajax({
url: "/yourActionUrl"
type: "POST",
data: $("#yourForm").serialize(),
dataType: "json"
}).done(function( model ) {
$("#Streetname").val(model.Streetname);
$("#City").val(model.City);
});
});
答案 2 :(得分:0)
使用相同的模型参数
在控制器上获取Mathodpublic ActionResult Login(LoginData model)
{
if (model == null)
{
model = new LoginData();
}
return View(model);
}
填写hoseno后如果你想要你可以使用ajax并重定向到你的getmethod并传递你的模型,请调用你的函数
用于验证使用脚本验证,以便您可以根据您的条件删除或添加。