0

View に jQuery によって読み込まれる PartialView が含まれるタイムシート アプリケーションがあります。メイン ビューと PartialView は、異なるモデル タイプで厳密に型指定されています。

データをロードするためにすべてが正常に機能します。それぞれのモデルからのデータは、メイン ビュー (すべての顧客とタスクを含むドロップダウン リスト) と PartialView (記録された時間の入力フィールドを含む特定の作成されたタスク) に読み込まれます。

ただし、モデルがデータベースを更新できるように、PartialView (フォームを含む) を送信する必要があります。通常、MVC バインディングの単純さは、モデルのプロパティがビュー内のフィールドにバインドされ、モデルを送信してから保存できることです。しかし、ここではうまくいきません。まず、データを取得するために必要だったのと同じように、jQuery で PartialView を送信する必要もあるようです。送信入力フィールドを使用するだけでは、PartialView だけが返されるためです (返されるとページ全体が占有されます)。だから私はこれをしました:

savehours ボタンをクリックすると、次のようになります。

        $('#savehours').click(function (event) {
            alert('Test');
            var form = $('#hoursForm');
            var actionUrl = '<%= Url.Action("GetTasks", "Timesheet") %>';
            $.ajax({
                type: "POST",
                url: actionUrl,
                data: form.serialize(),
                error: function (xhr, status, error) {
                    //do something about the error
                },
                success: function (data) {
                    $('#tasksDiv').html(data);

                }
            });
        });

そしてコントローラーで:

    [HttpPost]
    public ActionResult GetTasks(TasksViewModel tasksViewModel)
    {
        string test = tasksViewModel.Tasks.FirstOrDefault().ToString(); //Test for debugging...
        //Doesn't seem to work, I don't get the model back...
        _model.Save();
        return PartialView(GetTaskModel());
    }

私のコメントが示すように、PartialView のフィールドにバインドされたモデルにアクセスできるかどうかを単純な文字列でテストしましたが、アクセスできませんでした。

モデルを View に渡す代わりに ViewData を使用し、代わりにフィールドを ViewData にバインドしようと考えています。それがうまくいくかどうかはわかりませんが、現時点ではそれが私の唯一のアイデアです。それとも、ここで何か間違ったことをしていますか? 私がやろうとしていたことをすることは可能であるべきですか?

4

1 に答える 1

0

エンティティ フレームワークを使用していると仮定します。しかし、コントローラーのアクションに変化は見られませんでした。次のようなコードに変更してみてください。

[HttpPost]
public ActionResult GetTasks(TasksViewModel tasksViewModel)
{
    string test = tasksViewModel.Tasks.FirstOrDefault().ToString();
    //Doesn't seem to work, I don't get the model back...

    Tasks tasks = _model.Tasks.FirstOrDefault(s => s.ID.Equals(id)); //where id is the row id
    UpdateModel(tasks,taskViewModel); //where Tasks is your table
    _model.SaveChanges();
    return PartialView(GetTaskModel());
}
于 2010-12-09T09:16:54.533 に答える