2

RazorビューエンジンでASP.NETMVC4を使用しています。ビューのモデルからアイテムを削除して、Webグリッドからアイテムを削除しようとしています。私の見解では、モデルは次のようになります。

@model List<MiscCommon.Entities.Person>

そして、javascriptを介してこのリストからアイテムを削除しようとして失敗しました:

function RemovePerson(personId) {
    alert(personId); // Test. This works.
    //var people = '@Model[0].FirstName'; // This is a string. I want the actual model.
    @foreach(var person in Model)
    {
        if (person.Id == @:personId) { // Remove row here }
    }
}

そのjavascript関数内で、私はその人の正しいIDを取得します。モデルから削除するにはどうすればよいですか?(行がモデルから削除されたときにWebグリッドが更新されることを期待しています。)

4

1 に答える 1

3

ビューのモデルは、サーバー上で実行されるときに処理されます。後でクライアントで実行される JavaScript とは直接の相関関係はありません。JS 内で Razor 式を組み合わせたり一致させたりすることはできますが (実際に行っているように)、JS はオブジェクトとしてのモデルについて何も認識しません (ユーザーが指示しない限り)。

ID のセットを操作しようとしている場合は、次のようにさまざまな方法で実行できます。

  • オブジェクトの ID を含むテーブルの各行に data-* 属性を追加します。

  • ID のリストを含む Razor を使用して JS 配列宣言を作成します。ビューがレンダリングされると、配列宣言がレンダリングされます。

  • 必要なデータを含む隠しフィールド

  • AJAX アクション リンク

クライアントでモデル全体が本当に必要な場合は、JSON 文字列として隠しフィールドにシリアル化するか、スクリプト ブロック内のオブジェクト リテラルとしてシリアル化できます。ただし、通常はもっと良い方法があります。

Knockoutを見ることもできます。これは (私の意見では) クライアント モデルに重点を置いています。ただし、この問題を解決する必要はありません。

于 2012-09-06T03:30:54.453 に答える