如何确定在MVC中回发的jQuery事件形式

时间:2013-01-14 16:08:06

标签: jquery razor asp.net-mvc-4

我有一个表单,我从中选择员工使用自动填充功能,并根据选择执行一些复杂的任务。因此,我在文本框的更改事件上发回表单。

这是我的开始表格

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

1 个答案:

答案 0 :(得分:2)

当输入框失去焦点时,将触发更改事件。尝试按Tab键。

或者......尝试使用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();
});

更新:如何确定哪个HTML元素触发了HTTP请求?

执行此操作的一种方法是添加一个隐藏字段,该字段将指定导致表单提交的元素。

例如,将其添加到模型中,然后创建如下字段:

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

然后在提交表单之前设置其值:

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

您应该能够从控制器上的模型中检索此值。