案例一:比如我要傳遞一個新聞標題和新聞內容 存儲到數據庫去
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
