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

来源: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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...