1

MVC ドロップダウン リストをレンダリングし、ドロップダウン リストの値が変更されるたびに部分ビューをレンダリングするページを作成しようとしています。部分ビューでボタンをクリックして部分ビューで行われた変更を保持するまで、問題なく動作しています。

私は私の部分的なビューのために次のコードを持っています -

<script type="text/javascript">
    $(function () {
        $("#sortable, #sortable2").sortable({
            connectWith:  ".connectedSortable"
        }).disableSelection();        
    });

    $(function () {
        $("button").button();
        $(".submit").click(function () {
            var list = "somedata";
            var companyid = $("#myid").text();            
            $.ajax({
                url: "/Controller/Action",
                data: {
                    'values': list,
                    'id': myid
                }
            });
        });
    });

</script>

......

<div class="submit">
    <button>Submit</button>
</div>

これが私のメインビューのコードです-

<script type="text/javascript">
    function processList() {
        var myid = $("#ddList").val();
        $.ajax({
            url: 'Controller/Action/',
            data: {
                'id': myid 
            },
            datatype: 'html',
            success: function (result) { success(result); }            
        });
    }

    function success(result) {
        $("#partial").html(result);
    }
</script>

@using (Html.BeginForm("Action", "Controller"))
{      
    @Html.DropDownListFor(x => x.SelectedValue, Model.MyEntity, new { @id = "ddList", onchange = "processList();" })


<div id="partial" style="height:  90%">

        @Html.Partial("_MyPartialView")

</div>
}

私のコントローラーからのコードは以下の通りです -

public ActionResult Action(int? id)
        {                        
            id = id ?? 1;    

            var vm = new MyViewModel
            {
                .....
            };
            return PartialView("_MyPartialView", vm);
        }

        public ActionResult PersistActivities(int myid, string values)
        {
            int result = _service.UpdateActivityOrderByCompany(companyid, values);                         
            return new EmptyResult();            
        }

永続化ボタンをクリックしたときに、部分的なビューだけを再レンダリングするページが必要です。何もしなくても、それでいいのです。実際に起こっていることは、コントローラーが再び「アクション」アクションに入り、レンダリング エラーをスローすることです。jquery エラーを続行すると、部分的なビュー データだけがウィンドウ全体にレンダリングされます。

レンダリング/コントローラー呼び出しで私の問題がどこにあるのか、誰でも指摘できますか?

それが十分な情報であることを願っています。コードを削除する必要がありましたが、必要に応じてさらに提供できます。

ご意見ありがとうございます。

EDTI -

私が得ているエラーは、ソート可能なリストをレンダリングするための最初の関数の部分ビューにあります-

Microsoft JScript ランタイム エラー: オブジェクトが必要です

それが役立つことを願っています

4

1 に答える 1

0

何が起こっているのかの原因となる可能性のあるものがいくつかあります。

URL が正しくない可能性があります。

url: 'Controller/Action/',

次のようにする必要があります。

url: '@Url.Action("Action", "Controller")', 

あなたのボタン送信コードはあなたのあなたを参照してActionいますControllerが、あなたはおそらくあなたのPersistActivities. また、コントローラ アクションは変数myidandを期待していますが、 and 値valuesを送信しています。html 要素 myid も参照していますが、ここには示されていません。簡潔にするために省略したと思います。成功機能もありません。そのボタンが実際に何をするつもりですか?idinstead

おそらくあなたが望むのは次のようなものです:

 $(".submit").click(function () {
     var list = "somedata";
     var myid = 1;
     alert(myid);
     $.ajax({
        url: '@Url.Action("PersistActivities", "Home")',
        data: {
           'values': list,
           'myid': myid
        }            
     });
  });

最後に、ボタンがページを投稿している理由は、フォームを送信しているためです。実際にフォームを送信したくない場合は、ボタンのタイプをタイプボタンに変更する必要があります。

<button type="button">Submit</button>
于 2012-09-19T00:49:25.237 に答える