1

オートコンプリートを使用して従業員を選択し、選択に基づいて複雑なタスクを実行するフォームがあります。そのため、テキストボックスの変更イベントでフォームをポストバックします。

これが私のBeginフォームです

@using (Html.BeginForm("EmployeeEdit","Employee", FormMethod.Post, new { id = "EmployeeEditView" }))

これは、変更イベントでフォームをポストバックするテキスト ボックスです。

@Html.TextBoxFor(m => Model.CurveToBeProxied, new { id = "txtSearchEmployee" })

これがChangeイベントのコードです

$('#txtSearchEmployee').change(function () {
    alert("Hi");
    $('#EmployeeEditView').submit();
});

これがコントローラーのアクションです。btnSelectEmployee および btnUnSelectEmployee ボタンのクリックからのポストバックではうまく機能しますが、テキスト ボックスの変更イベントでは機能しません。変更イベントを特定する方法がわかりません。

public ActionResult EmployeeEdit(EmployeeEditViewModel model, string btnSelectEmployee, string btnUnSelectEmployee, string txtSearchEmployee)
{
    //if(! string.IsNullOrEmpty(btnSelectEmployee))
    //{
    //    SelectScenario(model);
    //}
    //else if (!string.IsNullOrEmpty(btnUnSelectEmployee))
    //{
    //    UnSelectScenario(model);
    //}
    return View(model);
}
4

1 に答える 1

1

入力ボックスがフォーカスを失うと、change イベントが発生します。タブを押してみてください。

または... keyupイベントを使用してみてください:

$('#txtSearchEmployee').keyup(function () { 
    var newValue = $('#txtSearchEmployee').val();       
    if(newValue === oldValue) // as RobertKoritnik suggested, check whether the value has changed in order to account for non-character keys such as arrow
       return false;

    oldValue = newValue;

    alert("Hi");
    $('#EmployeeEditView').submit();
});

更新: HTTP 要求を発行した HTML 要素を特定する方法は?

これを行う 1 つの方法は、フォーム送信の原因となっている要素を指定する隠しフィールドを追加することです。

たとえば、モデルに追加してから、次のようにフィールドを作成します。

@Html.HiddenFor(m => Model.ElementId, )

次に、フォームを送信する直前に値を設定します。

$('#txtSearchEmployee').change(function () {
    alert("Hi");
    $('#ElementId').val('txtSearchEmployee'); //set field that is causing the form submit
    $('#EmployeeEditView').submit();
});

コントローラーのモデルからこの値を取得できるはずです。

于 2013-01-14T16:15:21.000 に答える