0

使用 asp.net MVC,一旦用户输入主键字段,是否存在异步填充相关字段的最佳实践方法。例如,一旦用户在表单上输入了 EmployeeID,如果输入的 EmployeeID 有效,则应填充employeeName。

(我已经在使用 RemoteAttribute 来验证输入的 EmployeeID 是否有效,并且希望这能够以某种方式返回相关字段,因为它已经在调用存储库。)

4

2 回答 2

2

您可以使用 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 });
}
于 2012-12-20T12:05:31.643 回答
1

不,RemoteAttribute 不返回数据值,只返回验证信息。这里的最佳实践是使用 javascript/jquery/ajax。如果您已经有一个包装员工 ID 文本框的表单元素,则可以在验证成功时提交它。然后,您可以使用 javascript 拦截该表单提交并将 AJAX 请求发送到控制器上的操作方法,该方法返回 JsonResult。当您在浏览器中收到 JSON 时,使用它来填充其他字段。

回复评论:

不要以嵌套形式包装它。在表单中包含表单不是有效的 HTML。如果您使用此员工 ID 填充另一个表单(另一组文本框),是的,我会将它们设为 2 个单独的(兄弟)表单。您的 JSON 还应该返回 EmployeeID,在第二种形式中,我会将其放在隐藏字段中,而不是重复使用文本框来输入员工 ID。

于 2012-12-20T11:55:05.907 回答