1. 程式人生 > >ASP.NET MVC View向Controller提交資料

ASP.NET MVC View向Controller提交資料

    我們知道使用MVC的一個很重的的用途就是把Controller和View之間進行解耦,通過控制器來呼叫不同的檢視,這就註定了Controller和View之間的傳值是一個很重的知識點,這篇博文主要解釋一下View向Controller提交資料的幾種形式,認識有限,有不足的地方請各位博友能夠給完善。

一、通過Json資料

    方法一:使用$.getJSON

    //方式一:根據頁碼 非同步請求 資料
    function loadPageList(pageIndex) {
        $.getJSON("/Stu/List/" + pageIndex, null, function (jsonData) {
            if (jsonData.Statu == "ok") {
                $("#tbList tr:gt(0)").remove();
                $("#trTemp").tmpl(jsonData.Data.PagedData).appendTo("#tbList");
                //生成頁碼條
                makePageBar(loadPageList, document.getElementById("pageBar"), jsonData.Data.PageIndex, jsonData.Data.PageCount, 2, jsonData.Data.RowCount);
            }
        });
    }
    

    方法二:使用$.get

    //方式二:根據頁碼 非同步請求 資料
    function loadPageList(pageIndex) {

        $.get("/Stu/List/" + pageIndex, null, function (jsonData) {
            if (jsonData.Statu == "ok") {
                $("#tbList tr:gt(0)").remove();
                $("#trTemp").tmpl(jsonData.Data.PagedData).appendTo("#tbList");
                //生成頁碼條
                makePageBar(loadPageList, document.getElementById("pageBar"), jsonData.Data.PageIndex, jsonData.Data.PageCount, 2, jsonData.Data.RowCount);
            }
        }, "json");        

    }
 

    上面這兩種方式的到的結果是沒有區別的,如果使用$.getJSON,相當於直接指明傳遞的資料為Json格式;如果使用$.get,則需要在最後加上引數型別"json"即可。

二、通過From表單

    方法一:使用Ajax.BeginForm

        <!-------------- 新增對話方塊--開始----------------------------------------->
        <div id="addDiv">
            @using (Ajax.BeginForm("Add", new AjaxOptions() { OnSuccess = "afterAdd" }))
            {
            <table>
                <tr>
                    <td>系列名稱:</td>
                    <td>
                        @Html.TextBox("SerialName")
                    </td>
                </tr>

            </table>
            }

        </div>
            其中,"Add"是該表單要提交到的Action的名字,OnSuccess="afterAdd"是該表單提交後要執行的js事件,然後再js程式碼中編寫讓表單提交的命令即可。
//讓表單提交
       $("#addDiv form").submit();

             方法二:使用<form></form>
        <!--匯入Word-->
        <div id="importDiv" style="display: none">
            <form id="ff" action="/NotifyManage/ImportWord" method="post" enctype="multipart/form-data">
                <div style="margin-bottom: 20px">
                    <input id="FileUpload" type="file" name="files" data-options="prompt:'請選擇一個檔案...'" />
                </div>
            </form>
        </div>
              然後,使用easyui的jquery提交如下: 
        $('#ff').form('submit', {
            url: "/NotifyManage/ImportWord/",
            onSubmit: function () {
                // do some check
                // return false to prevent submit;
            },
            success: function (data) {

                $("#importDiv").dialog("close");
            }
        });

    在這裡,有一點需要注意的是,easyui中form提交的url是無法傳參的,如果你想通過url傳參的話,就需要另外一種形式了。

        var fileName = document.getElementById("file").value;
                                                
        $('#add').form('submit');
        $.post("/NotifyManage/Add",
              { fileName: fileName },
              function (data) {
              if (data == "ok") {
              //關閉對話方塊,重新整理表
              $("#addDiv").dialog("close");
              //initTable();
              $('#tt').datagrid("reload");
              } else {
              $.messager.alert("提示訊息", data);
              }
        });


   三、通過String字串

    方法一:提交單個字串

        function Delete(index) {
           
            var id = $('#tt').datagrid("getRows")[index].ID;   

            $.messager.confirm('確認', '您確定要刪除?', function (r) {
                if (r) {
                    $.post("/Administrator/Del"+id, function (data) {
                        if (data == "ok") {
                            //重新整理表格,去掉選中狀態的 那些行。
                            $('#tt').datagrid("reload");
                            $('#tt').datagrid("clearSelections");
                        } else {
                            $.messager.alert("刪除失敗~~", data);
                        }
                    });
                }
            });
        }

    方法二:提交多個字串

            //確認設定互評資訊按鈕事件
            function OK() {
                //①取得權重的值ID        
                var weightID = $('#cc').combobox('getValue');
               
                //②獲取評論人ID
                var rows = $('#left').datagrid("getRows");               
                var evaluaterIDs = "";
                for (var i = 0; i < rows.length; i++) {
                    evaluaterIDs += rows[i].ID + ",";
                }
                evaluaterIDs = evaluaterIDs.substr(0, evaluaterIDs.length - 1);

                //③獲取被評論人ID
                var rows = $('#right').datagrid("getRows");
                var criticsIDs = "";
                for (var i = 0; i < rows.length; i++) {
                    criticsIDs += rows[i].ID + ",";
                }
                criticsIDs = criticsIDs.substr(0, criticsIDs.length - 1);               
                
                //④提交到後臺
                $.post("/SettingEvaluation/SettingEvaluation",
                         { wid: weightID, eids: evaluaterIDs, cids: criticsIDs });
               
            }
            提交字串實際上是根據路由地址中的格式匹配的,提交的格式要和路由中設定的保持一致。

    總結:

    剛接觸這部分內容的時候,感覺很凌亂,總結貼上複製別人的程式碼,在學習的過程中遇到不會的知識點通過查詢easyui幫助文件或者自己思考去解決,思路一點一點的清晰,答案也就一步一步地出來了。有一點感觸就是,還是在專案中學習到的東西比較牢靠,因為有親自動手去實踐,動腦去思考;同時,在專案中也培養了我們的細心和耐心,在解決問題中漸漸成長。