3

jQuery コードに JavaScript 変数があり、ID を使用する必要がありますが、機能してHtml.ActionLinkいません。

@(Html.ActionLink("Genomför", "AnswerForm", "AnswerNKI", new {id = goalcard.Id},null))

「シンボル「goalcard」を解決できません」というメッセージが表示されます。これは、goalcard が JavaScript 変数であるためです。

これは次のようになります。

$.post('@Url.Action("Search", "SearchNKI")', data, function (result) {
    $("#GoalcardSearchResult tbody").empty();
    result.forEach(function(goalcard) {
        $("#GoalcardSearchResult tbody").append(
            $('<tr/>', {
            // steg Create a row for each result 
                html: "<td>" + goalcard.Name +
                "</td><td>" + goalcard.Customer +
                "</td><td>" + goalcard.PlannedDate +
                "</td><td>" + goalcard.CompletedDate +
                "</td><td>" + '@(Html.ActionLink("Genomför", "AnswerForm", "AnswerNKI", new {id = goalcard.Id},null))' + "</td>"
        }));
    });
});

私はしばらくテストしてきましたが、ほとんど解決策を見つけました。次のようになります。

@(Html.ActionLink("Genomför", "AnswerForm", "AnswerNKI",null, new {id = "mylink"}))

次に、新しい関数を作成しました。

$('#mylink').click(function (goalcard) {
    var id = goalcard.Id;
    this.href = this.href + '/' + id;
});

これは機能するはずですが、forEachループ内でこのクリック関数を使用してゴールカード変数に到達できるようにする必要があります。の中に入れると、forEachゴールカードの数に応じて、このクリック関数が何度も実行されます。

したがって、 /AnswerNKI/AnswerForm/1/2ゴールカードが 2 枚ある場合の結果は次のようになります。または/AnswerNKI/AnswerForm/1/2/3/4/5、ゴールカードが 5 枚ある場合などです。

しかし、そうあるべきです/AnswerNKI/AnswerForm/1

それは基本的に合計されます。

もう 1 つの問題は、他のすべての行にある /AnswerNKI/AnswerForm/ため、基本的に最初の行だけが ID を取得することです。

それを修正するための解決策を見つける方法がわかりません。

どんな種類の助けも大歓迎です。

前もって感謝します

4

1 に答える 1

2

これはあなたが抱えている特定の問題の解決策ではありません。しかし、jqueryを使用してページの一部を更新しているようです。

もしそうなら、PartialViewによって生成されたhtmlを返すコールバックを使用し、javascriptコールバック内で置換を行うことを検討しましたか?それは私がよく使うパターンです。これにより、MVCエンジン、コンポーネント、および設計ツールを使用できます。

これが私がすることの例です:

$("form.unscoped_filter").live("submit", function () {
    $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            error: function (a, b) {
                debugger;
            },
            success: function (result) {
                $("div#targetID").html(result);
                bindExtenders();
            }
        });
        return false;
    });

この特定の例では、特定のクラスのフォームからのポストバックをインターセプトし、それをWebサイトに渡して、MVCアプリで処理します。ターゲットメソッドとコントローラーは、通常のMVC設計アプローチに従って、BeginFormブロックに設定されます。ターゲットメソッドはデータを処理し、そのデータをhtmlに変換するPartialViewを返します。このデータは、jqueryブロックの成功コールバックに送信されます。そこでは、ターゲットdiv内のhtmlを置き換えるために使用されます。より多くの部分(javascript、MVCメソッド、PartialViewなど)が機能しますが、このように分離することで、各部分を独自の長所で機能させることができます。jqueryはDOMの操作に優れ、MVCメソッドは操作/処理に優れています。 htmlのリクエスト、およびPartialViewsは、htmlをレイアウトおよび生成するための優れたツールです。

これは、コツをつかめば、かなり柔軟で強力なアプローチです。特に、html5手法を使用して、ActionLinkからjqueryブロックにパラメーターを渡すことができます。たとえば、ActionLink呼び出しのhtml属性に「data-someParamName = ...」を追加してから、次のようにしてjavascriptブロック内のパラメーター値を抽出できます。

var pagerCode = $(this).attr("data-someParamName");

実際、これが、成功コールバック関数でどの特定のdivが更新されるかを制御する方法です。

繰り返しますが、これはあなたの特定の質問に答えるものではなく、あなたがやろうとしていると私が思うことに取り組む別の方法を示唆するものです。幸運を!

于 2012-05-08T14:19:57.037 に答える