控制器讀取視圖表單中的數據的幾種方式

来源:http://www.cnblogs.com/codelir/archive/2016/06/02/5552248.html
-Advertisement-
Play Games

上次分享了控制器向視圖傳遞數據的4種方式,今天再來給大家講講MVC視圖中的數據如何提交到控制器。 我們可以通過以下幾種方式提交數據到控制器: 1、通過Request.Form讀取表單數據 在 控制器動作方法(Action)中,POST方法提交的表單可以使用Request.Form讀取其中的數據: < ...


上次分享了控制器向視圖傳遞數據的4種方式,今天再來給大家講講MVC視圖中的數據如何提交到控制器。

我們可以通過以下幾種方式提交數據到控制器:

 

1、通過Request.Form讀取表單數據

在 控制器動作方法(Action)中,POST方法提交的表單可以使用Request.Form讀取其中的數據:

<html>

<head></head>

<body>

<form>

<input type="text" name="Name" value="代碼里"/>

<input type="text" name="Site" value="http://www.daimali.com"/>

<input type="submit" value="提交數據"/>

</form>

</body>

</html>

在控制器的Action中獲取數據:

public ActionResult  Create()

{

string Name=Request.Form["Name"].ToString();

string Site = Request.Form["Site"].ToString();

}

如上,我們實現了數據從視圖到控制器的傳遞,但在ASP.NET MVC中,ASP.NET MVC框架已經提供了DefaultModelBinder類,可以簡化表單數據的讀取,所以通過Request.Form讀取表單數據的方法並不是最好的方式。下麵我們再來看看第二種。

 

2. 通過FormCollection讀取表單數據

我們可以通過傳入的FormCollection集合讀取表單數據。

public ActionResult  Create(FormCollection collection)

{

string Name=collection["Name"];

string Site = collection["Site"];

}

 

3. 通過Model Binder讀取表單數據

模型綁定(Model Binder) 是將瀏覽器請求的數據映射到模型對象的過程。

<html>

<head></head>

<body>

<form>

商品名稱:<input type="text" name="Name" value="電腦"/>

單價:<input type="text" name="Price" value="5200"/>

<input type="submit" value="提交數據"/>

</form>

</body>

</html>

在控制器的Action中獲取數據:

public ActionResult  Create(Product product)

{

string Name=product.Name;

float Price =product.Price;

}

當 用戶提交表單到控制器動作方法中時,將在動作方法中接受一個商品對象作為參數,預設模型綁定會創建商品對象並將HTML表單的欄位值賦給該對象屬性。

模型綁定支持類型:簡單類型,自定義類,數組,集合,字典

我們來看看集合的綁定:

<html>

<head></head>

<body>

<form>

<input type="checkbox" name="source" value="代碼里"/>

<input type="checkbox" name="source" value="百度"/>

<input type="checkbox" name="source" value="騰訊"/>

<input type="submit" value="提交數據"/>

</form>

</body>

</html>

視圖中包含了一個覆選框列表,覆選框具有相同的名稱,在控制器的Action中獲取數據:

public ActionResult  GetCheckBoxList(List<string> source)

{

//多選的值自動轉換為字元串集合存儲在source集合中,可以通過迴圈獲取單個的值

string message=string.Empty;

foreach(string msg in source)

{

message+=msg;

}

.....

}

 

綁定複雜類

預設模型綁定能夠自動綁定大多數複雜類對象

public class Customer

{

public int ID{get;set;}

public string Name{get;set;}

public Address Address{get;set;}

}

public class Address

{

public string City{get;set;}

public string Country{get;set;}

}

Customer類包含一個返回Address類實例的Address屬性

視圖表單:

<html>

<head></head>

<body>

<form>

<span>客戶信息</span>

名稱:<input type="text" name="Name" value="代碼里"/>

 

<span>客戶地址:</span>

城市:<input type="text" name="Address.City" value="上海"/>

國家:<input type="text" name="Address.Country" value="中國"/>

 

<input type="submit" value="提交數據"/>

</form>

</body>

</html>

註意:地址表單中都有Address首碼聲明

public ActionResult  Create(Customer customer)

{

string name=customer.Name;

string city=customer.Address.City;

string Country=customer.Address.Country;

}

視圖中包含創建新客戶的HTML表單,該表單中包含客戶表單和客戶地址表單兩個子表單,地址表單的欄位都有Address首碼聲明。列如:City屬性對應表單欄位的Address.City,模型綁定時,自動將表單City欄位的值設置到Address.City屬性種。

 

相關特性使用:

當然我們在實際使用中可能不需要綁定所有的對象屬性,我們可以通過Exclude和Include來實現排除和指定綁定的屬性:

Exclude: 排查綁定的屬性列表,列表以逗號隔開

Include:可以綁定的屬性列表,列表以逗號隔開

 

列如,不需要綁定ID屬性時:

public ActionResult  Create([Bind(Exclude="ID")]Customer customer)

{

string name=customer.Name;

string city=customer.Address.City;

string Country=customer.Address.Country;

}

當然我們也可以在類中使用綁定特性:

[Bind(Exclude="ID")]

public class Customer

{

public int ID{get;set;}

public string Name{get;set;}

}

 

總結:

1.Model傳值: 文本框的name屬性值要和model實體的屬性名一一匹配,控制器中可以使用實體類的方式接收參數

2.Request.Form獲取Post方式提交的數據

3.FormConnection集合傳值

 

原文:代碼里(www.daimali.com)原文鏈接

 


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

-Advertisement-
Play Games
更多相關文章
  • 修改linux的系統時間使用date指令,date命令的功能是顯示和設置系統日期和時間。 輸入date 查看目前系統時間。 修改時間需要 date -功能字元 修改內容 命令中各選項的含義分別為:-d datestr, --date datestr 顯示由datestr描述的日期-s datestr ...
  • Ftp(文件傳輸協議) 概念 FTP是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的操作系統有不痛的FTP應用程式,而所有這些應用程式都遵守同 ...
  • Win8 app判斷網路連接狀態 推薦:http://www.cnblogs.com/roucheng/p/3535198.html ...
  • 代理伺服器(Proxy Server)是個人網路和Internet服務商之間的中間代理機構,它負責轉發合法的網路信息,對轉發進行控制和登記。代理伺服器作為連接Internet(廣域網)與Intranet(區域網)的橋梁,在實際應用中發揮著極其重要的作用。 環境:Win7(64位)+VMware11( ...
  • 1:W 查看系統整體負載,無法查看具體負載,比如記憶體,磁碟 23:25:20 up 13 min, 2 users, load average: 0.00, 0.01, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT flex tty1 - 23:13 1 ...
  • 屏幕捕捉快捷鍵動作............................保存到............-快捷鍵 全屏捕捉........................桌面(.PDF文件)......Command + Shift + 3 (win+shift+3)屏幕部分畫面.......... ...
  • ApiView是.net api的介面文檔查看網站,用於解決分散式開發過程中的Api介面管理和溝通問題。 自動生成api文檔; 方便調試及第三方開發人員對接,可以應用在asp.net mvc,wcf,webservice 中使用; 代碼及原理都很簡單,方便修改和完善。 ...
  • 各級省份代碼: 各級市代碼: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...