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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

MVC传值汇总

發(fā)布時(shí)間:2025/3/15 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MVC传值汇总 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?方法一:

Url傳參是通過(guò)Get的方式,一般我們都是通過(guò)一定規(guī)則的Url來(lái)傳參。比如下面的URL。

http://localhost/contorller/action/?Params1=a&Params2=b

public ActionResult Index(ExpModel model, string Params1 , string Params2)
{
??????????? ViewBag.P1 = Params1 ;
??????????? ViewBag.P2= Params2;
??????????? return View();
}

方法二:

修改MVC3中的路由規(guī)則

在Global.asax.cs中,修改路由規(guī)則

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
?????????"Default", // 路由名稱
?????????"{controller}/{action}/{id}", // 帶有參數(shù)的 URL
???????? new { controller = "Home", action = "Index", id = UrlParameter.Optional} // 參數(shù)默認(rèn)值
);

MapRoute方法在RouteCollectionExtensions里有6個(gè)重載版本,有興趣的可以研究這里里面的方法,這里我抽其中的一個(gè)進(jìn)行

public static Route MapRoute( ???

  this RouteCollection routes, ???

  string name, ???

  string url, ???

  Object defaults, ???

  Object constraints, ???

  string[] namespaces )

name:路由在路由列表里的唯一名字(兩次MapRoute時(shí)name不能重復(fù))

url:路由匹配的url格式

defaults:路由url {占位符} 的默認(rèn)值

constraints:url的 {占位符} 的約束

namespaces:這個(gè)是用于設(shè)置路由搜索的控制器命名空間

比如,我們可以修改為下面的規(guī)則

?routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
????????? "Default", // 路由名稱
??????????"{controller}/{action}/{uid}_{token}_{others}.html", // 帶有參數(shù)的 URL
????????? new { controller = "Home", action = "Index", uid = UrlParameter.Optional, token = UrlParameter.Optional,others = UrlParameter.Optional} // 參數(shù)默認(rèn)值
);

如果訪問(wèn)的URL地址如:http://localhost/home/index/123_tokenvalue_othersvalue.html 時(shí)

controller="Home", action="Index", uid=123, token=tokenvalue, others=othersvalue

獲取和上面的方法一樣。

OK,以上是抄別人的,來(lái)源我也忘了,百度吧,以下來(lái)點(diǎn)猛的

上面的方式無(wú)非是URL的問(wèn)題,而本質(zhì)我們可以區(qū)分為GET/POST,但看這兩種先,用的做多的

區(qū)分Get和Post

1、Get方法是用來(lái)向服務(wù)器上獲取數(shù)據(jù),而Post是用來(lái)向服務(wù)器上傳遞修改數(shù)據(jù)。

2、Get將表單里的數(shù)據(jù)添加到action所指向的URL后面,并且兩者之間使用”?”連接,而各個(gè)變量之間使用”&”連接;Post是將表單中的數(shù)據(jù)放在form的數(shù)據(jù)體中,按照變量和值對(duì)象的方式,傳遞到所指向的action.

3、Get是不安全的,因?yàn)樵趥鬏斶^(guò)程中,數(shù)據(jù)被放在請(qǐng)求的Url中,這樣,用戶可以直接在瀏覽器上看到提交的數(shù)據(jù),一些系統(tǒng)內(nèi)部信息也一同顯示在用戶面前。Post的所有操作對(duì)用戶來(lái)說(shuō)都是不可見的。

4、Get傳輸?shù)臄?shù)據(jù)量小,主要是受限與于Url長(zhǎng)度限制,其中IE瀏覽器對(duì)URL的最大限度為2083個(gè)字符。而post可以的傳輸大量的數(shù)據(jù),所以在上傳文件和大數(shù)據(jù)量時(shí)使用post。

5、Form提交默認(rèn)為Get方法提交(好吧,WebForm時(shí)代絕對(duì)是POST,MVC反轉(zhuǎn)了)。

6、Get方式獲取數(shù)據(jù)后,刷新不會(huì)有負(fù)面的影響,因?yàn)樗皇谦@取數(shù)據(jù),而Post方法刷洗頁(yè)面重復(fù)提交可能會(huì)產(chǎn)生不良的后果。

具體使用如下代碼:

Home/Index.cshtml:
<form action="/Home/Search" method="get">

<input? type="text" name="query"/>
<br />
<input? type="submit" value="Seach"/>
</form>

Home/Search方法:
public ActionResult Search(string query)

?

Home/ Search.cshtml頁(yè)面用于展示查詢到的信息,代碼略。

運(yùn)行效果圖如下:

(這個(gè)是效果圖)http://localhost:2246/Home/Search?query=哈哈哈

我們可以看到form的參數(shù)是直接顯示到url后面的。

而如果使用post方法,如:

<form action="/Home/Search" method="post">

  <input type="text" name="query"/>

  <br />

  <input type="submit" value="Seach"/>

</form>

運(yùn)行效果圖:

(這個(gè)是效果圖)http://localhost:2246/Home/Search

這里form表單數(shù)據(jù)是沒(méi)有體現(xiàn)在url參數(shù)上面的。而此時(shí)我們刷新頁(yè)面,會(huì)看到:

(這個(gè)是效果圖)"你所查找的網(wǎng)頁(yè)要使用已輸入的信息,返回此頁(yè)可能需要重復(fù)進(jìn)行的所有操作。。是否要繼續(xù)操作?”"

如果是向數(shù)據(jù)庫(kù)里提交數(shù)據(jù),刷新頁(yè)面極有可能就同時(shí)提交了兩次相同的數(shù)據(jù)了。

再次說(shuō)明,以上這個(gè)也是抄的,不過(guò)內(nèi)容我精簡(jiǎn)了。以上的方式無(wú)非是POST或GET,Controller的寫法一樣,方法暴露參數(shù)。

再來(lái)看猛料:

MVC中的頁(yè)面?zhèn)髦?#xff0c;通常指Controller和view之間的數(shù)據(jù)傳遞,經(jīng)常用到的有幾種方式,總結(jié)如下:

一、Controller----------->View

1、ViewData

獲取或設(shè)置一個(gè)字典,其中包含在控制器和視圖之間傳遞的數(shù)據(jù)。使用ViewData是采用鍵值對(duì)的形式,對(duì)所定義的數(shù)據(jù)進(jìn)行傳遞。在View中會(huì)自動(dòng)識(shí)別到擁有唯一鍵值的ViewData,并將數(shù)據(jù)顯示出來(lái)。

例子:

?public ActionResult() { ???????????

  List<Models.BlogArticle> list = (from d in db.BlogArticles where d.AIsDel == false select d).ToList(); ???????????

  //2將集合數(shù)據(jù)傳給視圖 ???????????

  // ViewBag.DataList = list;

  //viewBag形式 ???????????

   //利用viewdata形式 ???????????

  ViewData["DataList"] = list; ? ???????????

  return View();

}??

視圖中接收:

??<table id="tbList"> ???????

  <tr> ???????????

    <th>id</th> ???????????

    <th>標(biāo)題</th> ???????????

    <th>分類</th> ???????????

    <th>狀態(tài)</th> ???????????

    <th>時(shí)間</th> ???????????

    <th>操作</th> ???????

  </tr> ? ? ???????

  <!--遍歷Action方法,設(shè)置給ViewData的集合數(shù)據(jù),生成html代碼--> ???????

  @foreach (BlogArticle a in ViewData["DataList"] as List<BlogArticle>) ???????

  { ???????????

    <tr> ???????????????

      <td>@a.AId </td> ???????????????

      <td>@a.ATitle </td> ???????????????

      <td>@a.ACate</td> ???????????????

      <td>@a.AStatu </td> ???????????????

      <td>@a.AUpdatetime </td> ???????????????

      <td>@a.AContent </td> ???????????????

       <td> ???????????????????

        <a href="javascript:del(@a.AId)">刪</a> ???????????????????

        <a href="/home/modify/@a.AId">改</a> ???????????????

      </td> ????????????

    </tr> ? ???????

  } ???

</table>??

2、ViewBag

獲取視圖包,允許自定義屬性進(jìn)行賦值,屬于動(dòng)態(tài)類型(dynamic),以ViewBag.屬性=屬性值得方式進(jìn)行傳值,其實(shí)這里跟ViewData的使用原理類似。

例子:

public ActionResult Index() { ????????

  ViewBag.Title="Hello!";

}??

視圖中接收 <h1>ViewBag.Title</h1>

3、其他方式

在從controller向view傳值時(shí),除了以上兩種方式外,還包括一些鏈接的方式,例如頁(yè)面跳轉(zhuǎn)的方式RedirectToAction,還有RenderAction等自動(dòng)接收等方式。

二、從View-------->Controller

1、其實(shí)在這種情況下,通常會(huì)選擇利用ajax來(lái)通過(guò)get或者post進(jìn)行提交。如果采用最原始的JS來(lái)做,就要用到之前總結(jié)的ajax經(jīng)典的五步工作法了,但是通常我們采用JQuery封裝好的ajax提交方式。

即$.ajax({type,url,data,success:function(){})其中最常用的就是這幾個(gè)參數(shù)屬性了。

2、通過(guò)Get方式+路由配置+id值進(jìn)行提交數(shù)據(jù)

?<td> ???????????????????

  <a href="javascript:del(@a.AId)">刪</a>

?</td>??

JS:

<script type="text/javascript"> ??????

  function del(id) { ??????????

     if (confirm("您確定要?jiǎng)h除嗎?親~~")) { ??????????????

      window.location = "/home/del/" + id;//通過(guò)get方式采用路由配置+id的形式 ??????????

    } ??????

  } ???

?</script>??

三、Action---------->Action

前面兩種傳值方式都是在view和Controller之間進(jìn)行數(shù)據(jù)傳遞,那么如果某一個(gè)業(yè)務(wù)需要用到后臺(tái)的兩個(gè)Action,并且需要再這兩個(gè)Action之間進(jìn)行數(shù)據(jù)傳遞,這時(shí)需要用到另一個(gè)概念TempData:獲取要傳遞到視圖的臨時(shí)數(shù)據(jù).使用時(shí),需要注意TempData的生命周期,只在第一次請(qǐng)求Action時(shí)臨時(shí)數(shù)據(jù)存在,之后自動(dòng)變?yōu)镹ULL,具體的使用與ViewData相同,屬于鍵值對(duì)的數(shù)據(jù)字典類。

public ActionResult Index() ??? { ???????

  this.TempData["str"]="wyy"; ???????

  return View(); ???

} ???

public ActionResult Index2() ??? { ???????

  string name=this.TempData["str"]; ???????

  return Content(name); ???

}??

以上是在學(xué)習(xí)和實(shí)踐MVC過(guò)程中經(jīng)常用到的頁(yè)面?zhèn)髦档膸追N方式,大的方向看來(lái)從C向V數(shù)據(jù)傳遞以ViewData為基礎(chǔ),擴(kuò)展到ViewBag,更加方便快速了。

從V到C傳遞,則歸于ajax中的get和post的提交了。

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/EasonJim/p/4843148.html

總結(jié)

以上是生活随笔為你收集整理的MVC传值汇总的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。