使用asp.net MVC,有一种最佳实践方法,一旦用户输入主键字段,就会异步填充相关字段。例如,一旦用户在表单上输入了EmployeeID,如果输入的EmployeeID有效,则应填充employeeName。
(我已经使用RemoteAttribute验证输入的EmployeeID是否有效,并且希望这能够以某种方式返回相关字段,因为它已经调用了存储库。)
答案 0 :(得分:2)
您可以使用jQuery调用传递Id的异步操作并使用return填充结果,尝试类似
$(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方法来返回Name或您需要的任何属性,只需添加到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 });
}
答案 1 :(得分:1)
不,RemoteAttribute不返回数据值,仅返回验证信息。这里最好的做法是使用javascript / jquery / ajax。如果您已经有一个表单元素包装您的员工ID文本框,您可以在验证成功时提交它。然后,您可以使用javascript拦截该表单提交并向控制器上的操作方法发送AJAX请求,该方法返回JsonResult。当您在浏览器中收到JSON时,使用它来填充其他字段。
回复评论:
不要以嵌套的形式包装它。在表单中包含表单不是有效的HTML。如果您使用此员工ID来填充另一个表单(另一组文本框),是的,我会将它们分成2个单独的(兄弟)表单。您的JSON也应返回EmployeeID,在第二种形式中,我会将其放在隐藏字段中,而不是重复使用文本框来输入员工ID。