0

ASP.MVC にアプリケーションがあります。要件は、人のリストから人を選択して [情報] をクリックすることであり、そのページにその人の詳細をロードする必要があります。Info コントローラーがあり、別のコントローラーから Info ページに移動すると、すべて正常に動作します。ページで JavaScript を使用して動作させようとしていますが、目的のページではなく、別のコントローラーに移動するようです。

私は ToDoList コントローラを持っており、.cshtml には Info リンクをクリックするとこのコードがあります。

 function DoInfo@(i.ToString())() {
         $("#sessionid").val("@Model.cSessionId[i]");
         alert("hey");
         $("#PageController").val(66);
         $("#formID").submit();
    }

ToDoList コントローラーに移動して、このようなリダイレクトを行います

  if (viewModel.PageController == 66)  
        {
            pass = new PassingData();
            pass.personid = TSSessionService.ReadPersonId(viewModel.SessionId);
            TempData["pass"] = pass;

            return RedirectToAction("Index", "Info");
        }

そこには決して行かず、代わりに別のコントローラーに行きます。それらがどのようにリンクされているのか、また、Info リンク ボタンが ToDoList コントローラーに戻っているコントローラーに戻らないのはなぜですか。

不明な点がある場合はお知らせください。もう一度説明し、その他の詳細をお知らせします。

4

1 に答える 1

0

なぜこれをフォームと JavaScript の組み合わせとして行っているのか、私は混乱していると思います。上記に掲載していない、渡す必要のある他のプロパティはありますか? 新しいビューを返すだけなのに、なぜ JavaScript を使用してこれを行う必要があるのでしょうか?

投稿で、リストから人が選択されたら、コントローラーに移動してビューを表示する必要があることを示します。これはかなり簡単に思えますが、問題を単純化することをお勧めします。

これから始めましょう:フォームや JavaScript を使用しないようにリンクを変更します。リンクにするだけです。テキストの場合は、@Html.ActionLink()必要なパラメーターを使用して渡すこともできます。

テキストを表示していない場合は@Url.ActionLink()、要素をラップしているアンカーの href プロパティで使用してください。これらはどちらもルーティングを活用して、正しいパスが構築されていることを確認できます。

取得しようとしているコントローラーが何にでもアクセスできるTSSessionService場合は、プッシュしようとしているコントローラーを通過する必要がないTempData["pass"]ため、その方法でもよりクリーンになります。

より複雑な値セットを送信する必要がある場合は、共通のクラス名でバインドされた任意のクリックに応答できる汎用の .click() イベント ハンドラーを jQuery で作成することをお勧めします。data-valリンクで属性を使用$(this).attr('data-val')し、ハンドラーから読み取って、他の重要な情報を保存/取得できます。これにより、コントローラーに POST するオブジェクトをより簡単に作成できます。

これが役立つことを願っていますが、重要な点が欠けている場合は、上記の質問を更新してください。

于 2012-07-10T16:30:06.103 に答える