使用 asp.net MVC,一旦用户输入主键字段,是否存在异步填充相关字段的最佳实践方法。例如,一旦用户在表单上输入了 EmployeeID,如果输入的 EmployeeID 有效,则应填充employeeName。
(我已经在使用 RemoteAttribute 来验证输入的 EmployeeID 是否有效,并且希望这能够以某种方式返回相关字段,因为它已经在调用存储库。)
使用 asp.net MVC,一旦用户输入主键字段,是否存在异步填充相关字段的最佳实践方法。例如,一旦用户在表单上输入了 EmployeeID,如果输入的 EmployeeID 有效,则应填充employeeName。
(我已经在使用 RemoteAttribute 来验证输入的 EmployeeID 是否有效,并且希望这能够以某种方式返回相关字段,因为它已经在调用存储库。)
您可以使用 jQuery 调用传递 Id 的异步操作并使用返回填充结果,尝试类似
$(document).ready(function() {
$("#employeeId").change(function() {
$.ajax({
url: '@Url.Action("GetEmployeeData", "Employee")',
type: 'POST',
dataType: 'json',
data: { employeeId : $("#employeeId").val() },
contentType: 'application/json; charset=utf-8',
success: function (data) {
if (data.success)
{
// fill the employee name
$("#employeeName").val(data.employeeName);
}
else
{
// show a message in a alert or div
alert('This Employee ID is not valid. Try again!');
$("#employeeId").text("").focus();
}
}
});
});
});
在您的操作中,尝试创建一个 post 方法来返回名称或您需要的任何属性,只需添加到 Josn 方法返回即可。
[HttpPost]
public ActionResult GetEmployeeData(string employeeId)
{
var employee = /* get your employee using employeeId parameter from Repository*/;
if (employee != null)
{
return Json(new { success = true, employeeName = employee.Name });
}
return Json(new { success = false });
}
不,RemoteAttribute 不返回数据值,只返回验证信息。这里的最佳实践是使用 javascript/jquery/ajax。如果您已经有一个包装员工 ID 文本框的表单元素,则可以在验证成功时提交它。然后,您可以使用 javascript 拦截该表单提交并将 AJAX 请求发送到控制器上的操作方法,该方法返回 JsonResult。当您在浏览器中收到 JSON 时,使用它来填充其他字段。
回复评论:
不要以嵌套形式包装它。在表单中包含表单不是有效的 HTML。如果您使用此员工 ID 填充另一个表单(另一组文本框),是的,我会将它们设为 2 个单独的(兄弟)表单。您的 JSON 还应该返回 EmployeeID,在第二种形式中,我会将其放在隐藏字段中,而不是重复使用文本框来输入员工 ID。