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 はすべて、このテキスト ボックスの値によって入力されます。ユーザーがページを更新したり、Enterキーを押したり、ボタンを押したりすることなく、テキストボックスに値を入力すると、これらの DisplayFor 値が入力されるようにしたいと思います。

これが私のコード全体のビューです: 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);
        }
     });
});

私はあなたがあなたのフィドラーに持っているようなことをしていません。私はいつもラムダのようなものでそれらをやっていました

@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 に答える