asp.net-mvc - 在 Html.TextBoxFor() onchange 事件上更新模型值而不提交

标签 asp.net-mvc vb.net asp.net-mvc-3 razor onchange

我有一个在我的 View 中调用的文本框,如下所示:

@Html.TextBoxFor(Function(m) m.ActivityIDReturn)

我希望能够做的是,每当将值插入到此文本框中时,我希望它能够更新模型,而不必点击任何类型的提交按钮。该文本框的值将在 View 中填充多个元素。

所以理想情况下,文本框看起来像这样:

@Html.TextBoxFor(Function(m) m.ActivityIDReturn, new with {Key .onchange=UpdateModel()})

@Html.TextBoxFor(Function(m) m.ActivityIDReturn, new with {Key .onchange= RETLog(ActivityIDReturn:=ActivityIDReturn)}) 

RETLog() 是首先创建 View 的函数。

到目前为止,我能够实现这一目标的唯一方法是:

@Html.TextBoxFor(Function(m) m.ActivityIDReturn, New With {Key .onchange = "javascript:submit()"})

但我只能想象这种事情可能会产生多么可怕的副作用。

编辑:正是我想要在这里完成的事情

在我的模型中我有这个:

Public Property PS As RecordsTaskView
            Get
                Return GlobalVar.db.PS.RecordsTaskViews.Find(ActivityIDReturn)
            End Get
            Set(ByVal value As RecordsTaskView)
                value = GlobalVar.db.PS.RecordsTaskViews.Find(ActivityIDReturn)
            End Set
End Property

在我看来,我有这个:

 @Html.LabelFor(Function(m) m.ActivityIDReturn)
 @Html.TextBoxFor(Function(m) m.ActivityIDReturn, New With {Key .onchange="javascript:submit()"})
 @Html.DisplayFor(Function(m) m.PS.RefActionID)
 @Html.DisplayFor(Function(m) m.PS.QutDesc)
 @Html.DisplayFor(Function(m) m.PS.TaskDesc)
 @Html.DisplayFor(Function(m) m.PS.CltCode)
 @Html.DisplayFor(Function(m) m.PS.CltDesc)
 @Html.DisplayFor(Function(m) m.PS.BenIDin)

基本上所有这些 DisplayFor 都是由该文本框的值填充的。我希望当用户在文本框中输入值时填充这些 DisplayFor 值,而无需用户刷新页面或按 Enter 键或按任何按钮。

这是我的代码的完整 View :https://gist.github.com/aaronmallen/7042328

最佳答案

您需要使用 jquery ajax 调用。

$('#ActivityIDReturn').change(function(){
    $.ajax({
        url: '@Url.Action("Action", "Controller")',
        type: 'post',
        data: {
            Text: $('#TextField').val()
        },
        success: function (_result) {
            $('#TaskDesc').val(_result.foo);
        }
     });
});

我还没有像你在 fiddler 中那样做过。我总是用 lamda 之类的东西来完成它们

@Html.DisplayFor(Function(m) m.TaskDesc)

这将自动生成一个 TaskDesc 的 id。您需要查看生成的 Html 以确保您在 jquery 中调用的 id 匹配。

和 Controller 方法

<HttpPost()> _
Public Function UpdateFields(Text As String) As ActionResult
    Dim model as MODELNAME = //query the database
    Return Json(New With { .foo = model.bar, .baz = model.baz });
End Function

每次字段更改时都会触发此操作,因此如果他们输入包含 10 个字母的单词,则会触发 10 次。希望这有帮助

关于asp.net-mvc - 在 Html.TextBoxFor() onchange 事件上更新模型值而不提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19438284/

相关文章:

asp.net-mvc - 将 MyDbContext 与 IdentityDbContext 合并

mysql - vb.net INSERT CURDATE() 到 MySQL 问题

vb.net - 如何通过 vb.net 以编程方式使用 Outlook 捕获异常发送电子邮件?

asp.net - UpdatePanel崩溃,其他更新面板不起作用

asp.net-mvc-3 - 在 TeamCity 中构建时找不到 CompareAttribute(在 Windows Server 2012 RC 上)

c# - 对依赖注入(inject)感到困惑

asp.net - 为什么 Razor _layout.cshtml 文件名中有一个前导下划线?

asp.net-mvc - MS Expression Web(和其他Web编辑工具)中的Asp.net MVC

c# - 依赖注入(inject)

jquery - 许多带有大字符串的模态窗口