[AaronYang原創] 大話ASP.NET MVC3+ (C#與DOM與JS頁面上的很炫的技巧)


案例一:比如我要傳遞一個新聞標題和新聞內容 存儲到數據庫去

1.最簡單的通用Url公式就是

function getUrl() {
        var d = $("#表單ID").serialize();
        return "/控制器名稱/Action名稱?" + d;
    }

   1.1 假如不用jQuery的serialize()方法,有些情況需要手動拼接URL,傳到后台去,這里會遇到第一個問題,假如新聞內容可以1000字以內,新聞內容為500-1000字之間比較多的時候,

可能你拼接的時候會遇到第一道坎

或者頁面會彈出一個alert,提示這類錯誤,你只需要在站點的根目錄的web.config添加如下配置,這里最大是2097151,不要還想要大的了

<system.web>
   <httpRuntime maxQueryStringLength="2097151" />
</system.web>

 1.2  假如我們不采用第三方富文本框插件,而是使用textarea。如果新聞里面含有html,英文的雙引號,提交時候就會報一類錯誤。因為你提交的內容含有MVC默認因為安全機制而認為的不符合要求的字符串,這是防止別人注入腳本攻擊網站,MVC默認自帶的。

第一種解決辦法,也是不考慮安全問題的臨時解決辦法

在請求的Action上加上  ValidateInput(false),如果你在Controller上加,那就是影響整個Controller中所有的Model,當然你可以在Web.config配置,影響整個web,但是不建議那樣做

例如

或者單獨在Model中的屬性上加上一個特性 AllowHtml

這兩個小方法你可以試試

 

1.3  就像你假如是這樣子拼接過去的

$.ajax中的url參數,你是  

"/XX/XX?Content="+$("#Content").val()+ ...

這樣子,你別得意的太早,第三道坎就是     IE8下傳輸到后台中文會亂碼,IE6,7沒有測試,谷歌,火狐沒事

解決辦法:

使用  escape() 方法可以解決

"/XX/XX?Content="+escape($("#Content").val())+ ...

 

特別備注:我不太建議URL中這樣帶參數,因為URL過長會有一些意想不到的錯誤

強烈建議大參數(長的),例如我用$.ajax方法,把值獲得后放入data參數中,大家都知道Post都是把請求的參數放入header中,Get方式都是放入URL中,我們使用post,傳入的后台的值是沒有大小限制的,這里也不需要使用escape()了

例如,這里的Content參數,就是textarea中的值,字數很多,這樣子,我們不用擔心字數過長而出現的各種錯誤

 

 

 

 

 

 

1.4 第四道坎,如何顯示定義的HTML,MVC提供了幾個方法我不清楚,目前我也只是用了兩個

假設cshtml頁面頂部我們聲明了一個News新聞的Model,這個Model中有兩個屬性,一個是標題,第二個是內容

則頁面中我們可以這樣使用

普通的顯示

或者直接

但是假設含有\r\n這種換行的,我覺得可以使用試試

@Html.Raw(@Model.Content)

如果太復雜的html可以試試

 

關於拼接HTML,還有很多技巧,感覺就像C#代碼和HTML標簽靈活組合,可以省去很多冗余的代碼,還有C#代碼和Javascript的賦值技巧,C#的值可以賦值給Javascript變量和方法等,這里閑聊傳參而已

給你們展示一下我的C#和HTML拼接技巧

  場景: 現在有個編輯頁面,傳入學生ID,打開學生信息,有個性別的radio,默認顯示頁面要選中性別,Model中是哪個就選中哪個,入門的童鞋都會用if else,我的辦法如下(C#結合HTML)

 

  入門級賦值如下(這里只是展示了,不要生氣我貼圖,應該能看的懂的,模仿的會的呀)

 

給你們展示一下我的C#和Javascript賦值技巧

  第一種: 我們在return view之前放了一個集合和一個Id到ViewBag中,對應的View就可以在頁面上獲得

       

案例分析: 在這里,我存儲了bid就是所謂的某張表的主鍵,后台在顯示return view之前我存放了幾個我前台頁面會用到的值到ViewBag中,在頁面使用時,我把值取了出來,第二個是個集合,cnt就是這個集合的大小,這里不是不太好理解的。這里我同時也掩飾了 string,int,集合的從ViewBag中拿值得方法

第一個鐵律: @(C#變量名稱)  無攻不破,你可以任意的結合HTML

         

第二個鐵律: 

結合JS

   

②結合jQuery

③JS其他場景

作為JS方法中的參數,這里Expand是個普通的js方法

作為在HTML標簽中的JS傳參

至於@(C#代碼)  的使用還有一些,就看你敢不敢嘗試摸索了。這里注意重點理解原理,C#代碼,我加粗描紅的字

當然我們可以舉一反三:

②說明一下,這里的var是js中的var,不是C#的

③傳參的時候,我們經常需要隱藏字段作為輔助,下面簡單列舉幾個小寫法,注意這里的Hidden默認的第一個參數,都是 html  DOM元素中的name屬性,jQuery序列化的時候也是根據name屬性來的

這里的Model,熟悉MVC的一看就知道,整個頁面的全局Model屬性,當然這里也可以是一個 拓展方法,關於HTML結合拓展方法優化頁面的顯示,這里有興趣的童鞋可以去研究下

這里舉個我用到的場景,比如 說說和評論數,這里的評論數,我們就可以通過拓展方法得到,頁面上直接  拓展方法A(該說說的ID),拓展方法返回一個string即可,是int還可以特殊處理下,比如是0,顯示無評論

 

 

===================================本文來自博客園 茗洋AaronYang     博客地址:aaronyang.cnbolgs.com==========================

 

 

 關於MVC中的@ 一些用法,其實還可以結合@:  這個MVC大餐結合JS輸出

我們大腦的印象中都是 利用@:可以在@的作用域內 輸出一些文本,效果也等同於<text></text>

具體的初級用法請參考,這篇文章:   立即查看

今天我順便講一下 @: 在js中的另一個技巧,不琢磨難吃透   

 這里我可以我這樣個人理解,@標記着這里以后的代碼是C#代碼,而@:則是標記着C#以外的代碼(當然包括js,估計js不能換行寫,當然你可以采取多個@: 有興趣的童鞋可以試試,我看@和@:的普通用法是講@:是輸出文本的,沒想到自己琢磨能不能調用js,竟然可以了)

左邊是我簡單的列舉的一個大致簡單小樣子

其他備注: C#將值給JS的時候,例如賦的值是int型的時候,可以不加雙引號或者單引號,是string的必須加單引號

最后一次強調,要使MVC頁面代碼 精彩出色,這里的@(C#代碼),是C#代碼,例如我想要顯示客戶端請求的瀏覽器的信息,我們直接像后台那樣做就行了

 

最后5分鍾,啰嗦最后一句話,基本URL的小技巧,我的寫法不是直接 /XX/XX

第一種:

$('#表單ID').attr('action') +"?"+其他參數

第二種(就是結合JS結合C#代碼):

 

 還有一種傳參技巧,就是結合過濾器Filters,這里時間不早了,不說了

 關於前台POST后面的講解技巧也有很多,特別在做Insert操作時候,單表還容易,但是多表的插入,我這里還是有一些很炫的技巧,有機會再說吧

 如果你喜歡,歡迎投上你寶貴的一個推薦,謝謝你

 本文來自博客園 茗洋AaronYang     博客地址:aaronyang.cnbolgs.com

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM