3

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

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

我希望能够做的是,每当将一个值插入此文本框中时,我希望它更新模型而无需点击任何类型的提交按钮。此文本框的值在视图中填充了几个元素。

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

@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() 是首先创建视图的函数。

到目前为止,我能够做到这一点的唯一方法是:

@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 或按任何按钮。

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

4

1 回答 1

7

您需要使用 jquery ajax 调用。

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

我还没有像你在提琴手里那样做。我一直用 lamda 的东西来做它们

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

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

和控制器方法

<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 次。希望这会有所帮助

于 2013-10-17T22:27:57.917 回答