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();
                }
            }
        });

    });

});

そして、あなたのアクションで、Josn メソッドの return に追加するだけで、名前または必要なプロパティを返す post メソッドを作成してみてください。

[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 を使用してそのフォーム送信をインターセプトし、JsonResult を返すコントローラーのアクション メソッドに AJAX 要求を送信できます。ブラウザーで JSON を受け取ったら、それを使用して他のフィールドに入力します。

コメントへの返信:

入れ子状にラップしないでください。フォーム内にフォームを持つことは有効な HTML ではありません。この従業員 ID を使用して別のフォーム (別のテキスト ボックスのセット) に入力する場合、はい、2 つの別個の (兄弟) フォームを作成します。JSON は EmployeeID も返す必要があります。2 番目のフォームでは、ユーザーが従業員 ID を入力するためにテキスト ボックスを再利用するのではなく、これを非表示フィールドに配置します。

于 2012-12-20T11:55:05.907 に答える