Ajax.BeginForm()知多少

来源:http://www.cnblogs.com/sheng-jie/archive/2017/01/19/6305385.html
-Advertisement-
Play Games

在ASP.NET MVC中,Ajax.BeginForm扮演著非同步提交的重要角色。其中就有五個重載方法,但是在實際應用中,你未必使用的得心應手,今天我們就從主要的參數來一探究竟。 一、actionName 用於指定請求地址的Action名稱。 二、controllerName 用於指定請求地址的Co ...


在ASP.NET MVC中,Ajax.BeginForm扮演著非同步提交的重要角色。其中就有五個重載方法,但是在實際應用中,你未必使用的得心應手,今天我們就從主要的參數來一探究竟。
重載方法

一、actionName

用於指定請求地址的Action名稱。

二、controllerName

用於指定請求地址的Controller名稱。

三、routeValues

用來傳遞參數,支持兩種數據類型(兩種傳參方式):

  • object類型可以在使用時直接以匿名類方式聲明,使用非常方便
    舉例:new { id = 1, type = 1 }
  • RouteValueDictionary類型實現了IDictionary介面,因此在使用時可以用鍵值對方式聲明
    舉例:new RouteValueDictionary{ {"id", 1}, {"type", 1} }

四、htmlAttributes

用於指定生成form表單的html屬性。也支持兩種賦值方式:

  • object類型可以在使用時直接以匿名類方式聲明,使用非常方便
    舉例:new{id = "frm", @class = "cls" }由於class是C#中的關鍵字,因此需要在前面加@符號
  • IDictionary類型使用靈活,可以在一個地方聲明,多個地方調用,或修改後使用,舉例:

    Dictionary<string, object> htmlAttr = new Dictionary<string, object>
    {
     {"id","frm"},
     {"class", "cls"}
    };

    生成的代碼:
    <form action="/Home/Index/1?type=1" class="cls" data-ajax="true" id="frm" method="post">

五、ajaxOptions

ajaxOptions 參數列表

看到這麼多的參數,是不是一臉懵逼,且聽我一一講解。

  1. Confirm,就是在提交時會彈出一個確認框,一般不常用。
    new AjaxOption(){Confirm:"確認提交?"}
  2. HttpMethod,就是設置請求類型,預設為post。
    new AjaxOption(){HttpMethod = "GET"}
  3. UpdateTargetId,就是設置請求返回的數據/元素更新到哪個Dom元素中。
  4. InsertionMode,設置返回結果更新指定Dom元素的方式,預設為Replace。
  5. LoadingElementId,LoadingElementDuration設置提交實際的載入動畫效果。
  6. Url,用來當未指定Action,Controller時,直接在AjaxOption中指定請求的Url。@using (Html.BeginFrom( new AjaxOptions(){Url= '/Tasks/Create'})){ }
  7. AllowCache,標記是否使用緩存。
  8. OnBegin, OnComplete, OnFailure, OnSuccess,是用於指定回調的js函數。

下麵我將具體講解第5和第8個的具體用法。

設置Form提交動畫載入效果

  • 定義載入動態元素,並設置css樣式:div#loading { display: none; }

    <div id="loading"> ![](~/Content/Images/ui-loader-white-16x16.gif)</div>
  • 在form中指定LoadingElementId

    @using (Ajax.BeginForm(MVC.Account.Login(), 
    new AjaxOptions { 
    OnSuccess = "onLoginSuccess",
    LoadingElementId = "loading", 
    OnBegin = "onLoginBegin" }, new { @id = "loginForm" })){ }
  • 定義js函數,隱藏載入動畫。

    <script type="text/javascript"> 
    function onLoginBegin() { 
    // Disable the button and hide the other image here 
     // or you can hide the whole div like below 
    $('#logbtn').hide(); }
    </script>

設置JS回調函數

但其實這幾個js方法大家未必用得好。先來看看常規用法,其中指定的js函數均未傳參。

@using (Ajax.BeginForm("Create", "Tasks", new AjaxOptions()
{
    UpdateTargetId = "taskList",
    OnBegin = "onBegin",
    OnSuccess = "onSuccess",
    OnFailure = "onFailure",
    OnComplete = "onComplete"
}))
{
}
//Js函數
function onSuccess() {
    alert('Success!');
}

如果我想當請求失敗時,彈出返回的錯誤提示並清空form表單怎麼辦呢?

@using (Ajax.BeginForm("Create", "Tasks", new AjaxOptions()
{
    UpdateTargetId = "taskList",
    OnFailure = "onFailure("#formid")",
}))
{
}
//Js函數
function onFailure(id) {
    alert("Somthing is wrong!");    //alert彈出錯誤提示信息。
    var $form = $(id);
    $form.reset();//清空form表單。    
}

這樣實現並沒有拿到返回的錯誤數據,那到底如何傳參呢?
經過參考jquery.unobtrusive-ajax.js 源碼,終於弄清,預設的傳參是怎樣的。

OnBegin – xhr
OnComplete – xhr, status
OnSuccess – data, status, xhr
OnFailure – xhr, status, error

也就是說,預設未指定參數的js函數實際等同於:

@using (Ajax.BeginForm("Create", "Tasks", new AjaxOptions()
{
    UpdateTargetId = "taskList",
    OnBegin = "onBegin(xhr)",
    OnSuccess = "onSuccess(data, status, xhr)",
    OnFailure = "onFailure(xhr, status, error)",
    OnComplete = "onComplete(xhr, status)"
}))
{
}

看到這裡,我們再來看看上例【如果我想當請求失敗時,彈出返回的錯誤提示並清空form表單怎麼辦呢?】

@using (Ajax.BeginForm("Create", "Tasks", new AjaxOptions()
{
    UpdateTargetId = "taskList",
    OnFailure = "onFailure(xhr, status, error,"#formid")",
}))
{
}
//Js函數
function onFailure(xhr, status, error,id) {
    alert(error);    //alert彈出錯誤提示信息。
    var $form = $(id);
    $form.reset();//清空form表單。    
}

通過預設的參數,成功拿到錯誤信息,並且可傳遞自定義參數。

讀到這裡,覺得不錯,就給個推薦吧!

簡書筆記



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、設置圖片透明 this.pibox.BackColor = System.Drawing.Color.Transparent; //將背景設置為透明 this.pibox.Parent = lab_show; //將父容器設置為上一層的文件名 2、Timer不起作用 1、先托控制項Timer, 並 ...
  • 1.重寫GetHashCode方法註意點: (1)重寫GetHashCode方法,也應重寫Equals方法,否者編譯器會警告。 (2)相等的對象必須有相等的散列碼(若a.Equals(b),則a.GetHashCode()==b.GetHashCode())。 (3)GetHashCode()不應引 ...
  • 1.結構:結構除了可以含有屬性和欄位,還可以包方法和構造器,但不能包含黠認(無參數}的構造器。有的時候(比如在實例化一個數組的時候)不會調用值類型的構造器,因為所有數組記憶體都轉為用零來初始化,為了避免因為預設構造器只是偶爾調用而造成不一致,C#完全禁止了用戶顯式定義預設構造器,因為編譯器會將聲明時的 ...
  • 接 上一篇 內容, 這裡先看一下錯誤處理過濾器. 在看此部分之前, 先看看MVC已經提供的功能吧. 一. MVC 自帶功能 1. 配置方法 這裡的mode預設是 Off , 就是會在頁面中直接顯示詳細的錯誤信息. 如果是 On, 則不會顯示詳細的錯誤信息, 顯示是這樣的: 在沒有配置具體 statu ...
  • 最近遇到的一個項目中用到了標題所說的方法,用Spring.Net將業務類封閉成WebService供其它地方調用使用,感覺還是蠻新鮮的,於是在園子中搜了一篇園友寫的文章(這裡)自己也嘗試著搭了一個環境,最後是順利跑了起來,但是中間遇到了幾個問題,這裡記錄一下。 具體的搭建方法不再贅述,上面的文章寫的 ...
  • ...
  • 前言 EF通過linq和各種擴展方法,再加上實體模型,編寫資料庫的訪問代碼確實是優美、舒服,但是生成的sql不盡如意、性能低下,尤其是複雜些的邏輯關係,最終大家還是會回歸自然,選擇能夠友好執行sql語句的ORM,認認真真的編寫sql;問題是:EF是否也能夠很友好的執行sql語句?EF提供直接執行sq ...
  • 背水一戰 Windows 10 之 控制項(導航類): Frame ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...