Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定是什么jQuery事件导致了MVC中的post返回_Jquery_Razor_Asp.net Mvc 4 - Fatal编程技术网

如何确定是什么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选择员工。文本更改不会发生这种情况。