如何确定是什么jQuery事件导致了MVC中的post返回
我有一个表单,在该表单中,我使用自动完成从中选择一名员工,并根据选择执行一些复杂的任务。因此,我在文本框的更改事件上发回表单 这是我的表格如何确定是什么jQuery事件导致了MVC中的post返回,jquery,razor,asp.net-mvc-4,Jquery,Razor,Asp.net Mvc 4,我有一个表单,在该表单中,我使用自动完成从中选择一名员工,并根据选择执行一些复杂的任务。因此,我在文本框的更改事件上发回表单 这是我的表格 @using (Html.BeginForm("EmployeeEdit","Employee", FormMethod.Post, new { id = "EmployeeEditView" })) 这是一个文本框,我想在更改事件中为其回发表单 @Html.TextBoxFor(m => Model.CurveToBeProxied, new {
@using (Html.BeginForm("EmployeeEdit","Employee", FormMethod.Post, new { id = "EmployeeEditView" }))
这是一个文本框,我想在更改事件中为其回发表单
@Html.TextBoxFor(m => Model.CurveToBeProxied, new { id = "txtSearchEmployee" })
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);
}
这是更改事件的代码
$('#txtSearchEmployee').change(function () {
alert("Hi");
$('#EmployeeEditView').submit();
});
这是控制器的动作。它适用于从BtSelectEmployee和BtUnSelectEmployee按钮单击回发,但不适用于文本框更改事件。我不知道如何识别变更事件
@Html.TextBoxFor(m => Model.CurveToBeProxied, new { id = "txtSearchEmployee" })
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);
}
当输入框松开焦点时,将触发更改事件。试着按tab键 或者…尝试使用事件: 更新:如何确定触发HTTP请求的HTML元素 一种方法是添加一个隐藏字段,指定导致表单提交的元素 例如,将其添加到模型中,然后创建如下字段:
@Html.HiddenFor(m => Model.ElementId, )
然后在提交表单之前设置其值:
$('#txtSearchEmployee').change(function () {
alert("Hi");
$('#ElementId').val('txtSearchEmployee'); //set field that is causing the form submit
$('#EmployeeEditView').submit();
});
您应该能够从控制器上的模型中检索此值。当输入框松开焦点时,将触发更改事件。试着按tab键 或者…尝试使用事件: 更新:如何确定触发HTTP请求的HTML元素 一种方法是添加一个隐藏字段,指定导致表单提交的元素 例如,将其添加到模型中,然后创建如下字段:
@Html.HiddenFor(m => Model.ElementId, )
然后在提交表单之前设置其值:
$('#txtSearchEmployee').change(function () {
alert("Hi");
$('#ElementId').val('txtSearchEmployee'); //set field that is causing the form submit
$('#EmployeeEditView').submit();
});
您应该能够从控制器上的模型中检索此值。更改应该有效,您是否看到
警报('hi')
?您试图对服务器上的更改事件执行什么操作?因为如果可能的话,我们会建议你不要做完整的回发。为了在MVC中实现更好的用户体验,Ajax请求将是一个更好的选择?仅仅else
就够了吗?如果您使用TextBoxFor
不要操纵ID。它们将正确地设置为您的模型,以便以后在服务器上进行数据绑定,而无需提供单独的控制器操作参数,而只需提供视图模型。顺便说一句:如果您有强类型视图,并且您将ID设置为从模型填充的单独控件,则可能是做错了什么。或者不了解Asp.net MVC是如何工作的…更改应该可以工作,您是否看到了警报('hi')
?您在服务器上的更改事件上尝试执行什么操作?因为如果可能的话,我们会建议你不要做完整的回发。为了在MVC中实现更好的用户体验,Ajax请求将是一个更好的选择?仅仅else
就够了吗?如果您使用TextBoxFor
不要操纵ID。它们将正确地设置为您的模型,以便以后在服务器上进行数据绑定,而无需提供单独的控制器操作参数,而只需提供视图模型。顺便说一句:如果您有强类型视图,并且您将ID设置为从模型填充的单独控件,则可能是做错了什么。或者不了解Asp.net MVC是如何工作的……在keyup
中,您应该实际检查值是否已更改。如果用户只按了箭头键、结束键或home键怎么办?但您可能是对的,OP希望每次击键时都触发更改事件,而不是焦点更改。。。罗伯特科里特尼克说得好,值得一提。我会在我的回答中包括这一点。我认为我的帖子令人困惑。表单在文本更改时被提交,但如何在控制器中确定表单是通过按钮单击或文本更改事件提交的。单击按钮“说BTN选择员工”时,将填充操作参数BTN选择员工。文本更改时不会出现这种情况。在keyup
中,您应该实际检查值是否已更改。如果用户只按了箭头键、结束键或home键怎么办?但您可能是对的,OP希望每次击键时都触发更改事件,而不是焦点更改。。。罗伯特科里特尼克说得好,值得一提。我会在我的回答中包括这一点。我认为我的帖子令人困惑。表单在文本更改时被提交,但如何在控制器中确定表单是通过按钮单击或文本更改事件提交的。单击按钮“说BTN选择员工”时,将填充操作参数BTN选择员工。文本更改不会发生这种情况。