日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

mvc基础系列说谈(5)——参数与值传递,提交数据

發布時間:2025/3/14 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mvc基础系列说谈(5)——参数与值传递,提交数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備工作:

現在添加Customer控制器,同時,在創建控制器的時候,添加CreateDeleteDetail動作。

Customer的模型結構為:

Customer類:CustomerIDLastNameFirstName

現在控制器情況為:?

代碼 public?class?CustomerController?:?Controller
{
????????
public?ActionResult?Index()
????????{
????????????
return?View();
????????}

????????
public?ActionResult?Details(int?id)
????????{
????????????
return?View();
????????}

????????
public?ActionResult?Create()
????????{
????????????
return?View();
????????}?

????????[AcceptVerbs(HttpVerbs.Post)]
????????
public?ActionResult?Create(FormCollection?collection)
????????{
????????????
try
????????????{
?????????????????
return?RedirectToAction("Index");
????????????}
????????????
catch
????????????{
????????????????
return?View();
????????????}
????????}

????????
public?ActionResult?Edit(int?id)
????????{
????????????
return?View();
????????}

????????[AcceptVerbs(HttpVerbs.Post)]
????????
public?ActionResult?Edit(int?id,?FormCollection?collection)
????????{
????????????
try
????????????{
????????????????
return?RedirectToAction("Index");
????????????}
????????????
catch
????????????{
????????????????
return?View();
????????????}
????????}
}

?

可以看到,除IndexDetails動作外,其它的CU全是兩個動作,由于修飾標簽的作用而在不同情況下調用動作來返回視圖。

(一)添加列表

Views中添加Customer文件夾,然后在此文件夾中添加Index視圖。并指定強類型Customer,并指定自動生成視圖內容:List

代碼就不貼了。然后在動作中為視圖指定model

public?ActionResult?Index()
{
????IList
<Customer>?_list?=?dd.ShowList();
????
return?View(_list);
}

?

Index

CustomerId

FirstName

LastName

?

3

Tom

?

編輯 | 詳細

2

Tom

Song

編輯 | 詳細

Create New

?

現在點擊第一條的詳細,會發生什么事:

<%=?Html.ActionLink("詳細",?"Details",?new?{?/*?id=item.PrimaryKey?*/?})%>

?

通過ActionLink來重定向到控制器下的Details動作。

public?ActionResult?Details(int?id)
{
??
return?View();
}

?

這個動作接受一個參數,但在列表中沒有提供參數:

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Details(Int32)' in 'Web.Controllers.CustomerController'. To make a parameter optional its type should be either a reference type or a Nullable type.

參數名: parameters

因為在Details方法(動作)動作中要求有一個int型參數,但在傳遞時傳遞的是一個Null值,解決:

1 Details方法的參數改為可空整形

2 傳遞參數

現在為Details動作添加視圖,Details。這個就不說了。然后再點詳細:

會提示:未將對象引用設置到對象的實例。這是因為還沒有為詳細視圖返回model實例。現在在Details方法(動作)中,添加:

public?ActionResult?Details(int??id)
{
???Customer?customer?
=?new?Customer();

???
if?(id.HasValue)
???????customer?
=?dd.GetCustomer((int)id);

???
return?View(customer);
}

?

現在再點詳細看看,會發現,可以預覽,但沒有值,這個很容易理解,傳遞的值為Null,所以int? id就為空,所以返回的是一個空實例(只有實例的默認值)。這時候可以為其指定一個路由默認值:

?

new { controller = "News", action = "NewsList", id = "2" },它取的的是id=2這個默認值

?

接下來為詳細傳遞id參數,即在列表視圖中為詳細鏈接添加參數:

<%= Html.ActionLink("詳細", "Details", new { id=item.CustomerId })%>

其中id部分與Details動作的參數名相同。現在的詳細就可以正常了。

Index

CustomerId

FirstName

LastName

?

3

Tom

?

編輯 | 詳細

2

Tom

Song

編輯 | 詳細

?

?

Details

CustomerId: 3

FirstName: Tom

?

?

(二)創建Create視圖

在創建過程中,選擇強類型,并選擇Customer實體。

然后Create視圖的代碼就不貼了。簡單的說明一下:

·驗證控件,每個創建的輸入文本框都有相應的ValidationMessage

·Form,添加了表單,但沒有指定動作類型,所以這里默認的是Post

??? Post:表單在提交時,填寫在表單中的數據將在底層發送到action=“url”中的url

??? Get:表單在提交時,填寫在表單中的數據會和action=“url”中的url編碼在一起

·輸入框,這個會依賴此頁的強類型Model而對應生成。

Inherits="System.Web.Mvc.ViewPage<Web.Models.Customer>"

然后看控制器中,可以看到有兩個動作:

public?ActionResult?Create()
{
????
return?View();
}?

[AcceptVerbs(HttpVerbs.Post)]
public?ActionResult?Create(FormCollection?collection)
{
????
try
????{
???????
return?RedirectToAction("Index");
????}
????
catch
????{
???????
return?View();
????}
}

?

第一個沒有參數,返回空視圖,它就是為導航到Create頁。且默認Methodget

第二個用于處理創建工作,它的Method被標簽修飾為Post,它只接受post動作。

還以列表頁Index為例,當點擊

<%= Html.ActionLink("Create New", "Create") %>時,會getCreate動作。這時執行第一個動作,返回空視圖(其實這個視圖與返回一個沒有值的model一樣)

然后在創建時,提交表單,會提交到Create動作,這個時候接愛的謂詞為Post[AcceptVerbs(HttpVerbs.Post)]

所以,在這個動作中做數據添加操作。

(1)參數為FormCollection collection

這個表單集合包含了post過來的表單元素。

[AcceptVerbs(HttpVerbs.Post)]
public?ActionResult?Create(FormCollection?collection)
{
????
try
????{
???????Customer?customer?
=?new?Customer?
???????{?
???????????FirstName?
=?collection["FirstName"],
???????????LastName
=collection["LastName"]?
???????};
???????dd.Add(customer);
???????
return?RedirectToAction("Index");
????}
????
catch
????{
???????
return?View();
????}
}

?

(2)參數為持久實體

[AcceptVerbs(HttpVerbs.Post)]
public?ActionResult?Create(Customer?customer)
{
????
try
????{
????????dd.Add(customer);
????????
return?RedirectToAction("Index");
????}
????
catch
????{
????????
return?View();
????}
}

?

這個比較方便。

3)通過Form方法得到參數。

string?strFirstName?=?Request.Form["FirstName"].ToString();
string?strLastName?=?Request.Form["LastName"].ToString();

?

這個與FormCollection 相同

?

Index

CustomerId

FirstName

LastName

?

2

Tom

Song

編輯 | 詳細

3

Tom

?

編輯 | 詳細

4

編輯 | 詳細

5

編輯 | 詳細

6

編輯 | 詳細

Create New

?

?

(三)刪除與編輯與上面的同理

例如:刪除可以get方式傳遞一個id

(四)文件上傳

如果有文件上傳時,要把Form

enctype="multipart/form-data"

屬性設置一下。

HTML enctype 屬性

enctype 屬性 -- 代表HTML表單數據的編碼方式

application/x-www-form-urlencoded:窗體數據被編碼為名稱/值對.這是標準的編碼格式.

multipart/form-data:窗體數據被編碼為一條消息,頁上的每個控件對應消息中的一個部分.

text/plain:窗體數據以純文本形式進行編碼,其中不含任何控件或格式字符.

Form的這個屬性的默認值是:application/x-www-form-urlencoded

http頭中可以看到:Content-Type:application/x-www-form-urlencoded

?

<input type="file" name="upfile1" />

注意:上傳控件的name屬性一定要設置,否則提交附件無效!

(1)以默認方式提交文本

FirstName:

LastName:

提交創建:

發送的數據是:

FirstName:松

LastName:武

(2)以默認方式提交上傳文件

現在發現,上傳文件不能提交到服務器。

查看提交的內容,可以看到:

FirstName=q1&LastName=q2

兩個文本屬性以kv對傳到服務器,而附件:

upfile1=C:\Documents and Settings\Administrator\妗岄潰\Image76.gif

只有一個地址而已

(3) 改用multipart/form-data

這個時候,在http頭及提交的數據流里可以看到:

?

Content-Typemultipart/form-data;

boundary=---------------------------7daf1ec01dc

?

-----------------------------7daf1ec01dc

Content-Disposition: form-data; name="FirstName"

?

x

-----------------------------7daf1ec01dc

Content-Disposition: form-data; name="LastName"

X

Content-Disposition: form-data;

name="upfile1"; filename="C:\Documents and Settings\Administrator\妗岄潰\Image76.gif"

Content-Type: image/gif

二進制

?

以上貼出部分內容。

現在,全部的值都可以得到了。

?

[AcceptVerbs(HttpVerbs.Post)]
public?ActionResult?Create(FormCollection?collection)
{
????
try
????{
???????Customer?customer?
=?new?Customer?
???????{?
??????????FirstName?
=?collection["FirstName"],?
??????????LastName?
=?collection["LastName"]?
???????};
???????dd.Add(customer);?

???????
if?(Request.Files.Count?>?0)
???????{
???????????Request.Files[
0].SaveAs(Server.MapPath("../uploadlist/xx.gif"));
???????}

???????
return?RedirectToAction("Index");
????}
????
catch
????{
???????
return?View();
????}
}

?

?

?

轉載于:https://www.cnblogs.com/jams742003/archive/2010/02/08/1665773.html

總結

以上是生活随笔為你收集整理的mvc基础系列说谈(5)——参数与值传递,提交数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91黑人精品一区二区三区 | 87福利视频 | 被黑人啪到哭的番号922在线 | 高清中文字幕 | 一本视频 | 91片黄在线观看喷潮 | 国产在线中文字幕 | 尹人香蕉网 | 秋霞国产一区 | 欧美美女一区二区 | 精品成人av一区二区三区 | 伊人久久大香线蕉综合75 | 天堂av成人 | 国产成人无码av | 永久免费无码av网站在线观看 | 欧美精品性生活 | 欧美人妻日韩精品 | 超污视频在线观看 | 久久精品无码Av中文字幕 | 一本到免费视频 | 69久久久久| 白白色免费视频 | 99超碰在线观看 | 日日cao| 少妇激情网 | 欧美三区视频 | 在线免费观看黄网站 | 天天射天天 | 久热精品视频在线播放 | 国外av网站 | 无码精品人妻一二三区红粉影视 | 97精品国产97久久久久久春色 | 在哪里可以看黄色片 | 男人透女人免费视频 | 日本久操| 天天操好逼 | 免费视频www在线观看网站 | 国产18av| 日韩精品一| 成人午夜视频精品一区 | 永久久久久久 | 老司机深夜福利视频 | 精品一区久久久 | 黄色www视频| 91在线视频导航 | 国产在线无码精品 | 美女干b视频 | 日韩一区二区三区在线看 | 午夜激情一区二区 | 成人开心激情 | 成人精品视频在线观看 | 日韩黄 | 天堂免费在线视频 | 精品一区二区三区免费观看 | 农村偷人一级超爽毛片 | 一级淫片免费看 | 天天综合av | 六月激情 | 日本黄色一级视频 | 一个人在线观看免费视频www | 天天操综合网 | 亚洲色图图片 | 小镇姑娘高清播放视频 | 麻豆视频在线观看免费网站 | 麻豆免费在线视频 | 日本成人免费网站 | 美景之屋电影免费高清完整韩剧 | 手机在线看片你懂的 | 人妻少妇精品一区二区三区 | 精品久久精品久久 | 我我色综合 | 涩涩97| 一级特黄毛片 | r级无码视频在线观看 | 九九视频国产 | 谁有免费的黄色网址 | 欧美一区中文字幕 | 日日摸日日碰夜夜爽无码 | 综合网av | 欧美色图激情小说 | 久久精品老司机 | 在线观看国产成人 | 青草青草视频 | 国产色图视频 | 日本在线精品视频 | 国产又爽又猛又粗的视频a片 | 欧美国产精品一二三 | 快乐激情网| 精品国产三级a∨在线 | 日韩福利视频网 | 91丝袜呻吟高潮美腿白嫩 | 成人在线国产视频 | 毛片大全在线观看 | 黑丝国产在线 | 日本一区二区三区网站 | 久久精品久久久久久久 | 毛片网站视频 | 亚洲我射 | 色www亚洲国产张柏芝 |