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

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

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

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

   1.1 假如不用jQuery的serialize()方法,有些狀況須要手動拼接URL,傳到後臺去,這裏會遇到第一個問題,假如新聞內容能夠1000字之內,新聞內容爲500-1000字之間比較多的時候,ajax

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

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

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

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

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

在請求的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

相關文章
相關標籤/搜索