1

ここで困っています。私は、会社が私たちのサイトのユーザーを高く評価したり低く評価したりできるビューを持っています. ユーザーは表に一覧表示され、列には会社がユーザーに賛成または反対するための小さな手の画像があります。そこで ActionLink をプログラムしましたが、会社がユーザーに投票するたびにポストバックが発生するのは望ましくありません。

会社が投票するユーザー ID をリストに入力し、ページを離れるときにフィルターがリクエストをインターセプトし、リストを取得して投票を処理することにしました。この投稿では、アクションを呼び出すときにフィルター パラメーターを初期化する方法を説明しましたが、ご覧のとおり、ユーザーがアクションではなくビューを終了したときに、フィルターがリストを取得する方法が必要です。

コード ビハインドは MVC と組み合わせるとベスト プラクティスではないため、使用したくありませんが、ポストバックもオプションではありません。

これが私がこれまでに持っているものです:

public ActionResult ListUsers()
{
    // Create a List with user models and send it to a View,
    // which generates a WebGrid

    return View(userList);
}

public class PromoteUsersFilter : ActionFilterAttribute
{
    public int[] UsersToPromote { get; set; }
    public int[] UsersToScrewWith { get; set; }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        //insert promoting logic here
    }
}

ほとんどの Web サイトがこの機能を備えているため、簡単な方法があると思います。誰でもこれで私を案内できますか?

4

2 に答える 2

3

コントローラーのメソッドを呼び出す AJAX を使用しないのはなぜですか? json を適切に設定した場合でも、オブジェクトに逆シリアル化されます。

私の知る限り、これは MVC の考え方でも問題ありません。データを永続化する必要があるが、ページ全体を更新する必要がない場合、それが私が知っている唯一の方法です。AJAX を使用して部分ビュー全体を交換することもできます。

ここでよくある誤解は、(MVC の) ビュー部分が単なる 1 ページではなく、実際には 1 ページに分割された多数のビューで構成されているというものだと思います。したがって、これらのビューの 1 つを個別に更新しても、実際にはパターンが崩れることはありません。

于 2012-04-13T17:00:05.513 に答える
1

間違いなくAJAXソリューションに行きます:

ビューでは次のようになります。

<div>
    <span class="cssUpvote" id="upvote"><span>
    <span class="cssDownvote" id="downvote"></span>
</div>

いくつかのJqueryで

<script>
   $(document).on('click', 'upvote', function (event) {

       $.ajax({
             type: 'POST',
             url: '/Votes/Upvote',
             data: { id: companyId }
       });
   });

   $(document).on('click', 'downvote', function (event) {

       $.ajax({
             type: 'POST',
             url: '/Votes/Downvote',
             data: { id: companyId }
       });
   });
</script>

そして、コントローラーでのアクション

[HttpPost]
public ActionResult Upvote(int id)
{
    //Do something with the (company)id
    return Json();
}

[HttpPost]
public ActionResult Downvote(int id)
{
    //Do something with the (company)id
    return Json();
}
于 2012-04-13T17:33:18.193 に答える