剑轩

mvc前后台传值,action之间传值

电脑版发表于:2017/10/11 10:11


MVC后台向前台传值



l  Viewdata

    Viewdata[key] = xj


l  Viewbag

    Viewbag.key = xj

 

l  model

        model传参一次只能传一个

        model传参的类型转化更简单一点,

        @model 接类型即可       
       
       如果model传参想传一个字符串可以这样 return view('index',"参数内容"),如果直接写return view("参数内容"),这个参数内容他会认为是视图的名字,而不是参数的内容!


ltempdata

         用法和viewdata类似,TempData["name"] = value。只是他是一个临时变量,一次请求中有效,第二次就失效了

      ViewdataViewbag其实都是一个键值对,三种传参的方式其实显示几乎都是一样的,字符串,int这些可以直接显示。如果是对象类型做一个转化在显示即可

      一个action多钟传参可以一起使用


简单案例:

后台:

        public ActionResult Index()
        {
            //传一个简单的字符串
            ViewData["name"] = "hello razor22222";

            List<string> fruits = new List<string>() { "西瓜", "苹果", "桃子", "李子" };

            ViewData["fruits"] = fruits;

            UserInfo userInfo = new UserInfo() { Id = 1, UserName = "诸葛詹", Age = 19, Area = "蜀国" };
            ViewData["userInfo"] = userInfo;


            List<UserInfo> userInfos = new List<UserInfo>() {
                new UserInfo(){ Id=1, UserName="诸葛亮",Age=27, Area="蜀国" },
                new UserInfo(){ Id=2, UserName="诸葛亮",Age=30, Area="蜀国" },
                new UserInfo(){ Id=3, UserName="曹操",Age=30, Area="魏国" },
                new UserInfo(){ Id=4, UserName="孙权",Age=25, Area="吴国" },
                new UserInfo(){ Id=5, UserName="黄月英",Age=20, Area="蜀国" },
                new UserInfo(){ Id=6, UserName="黄忠",Age=70, Area="蜀国" },
                new UserInfo(){ Id=7, UserName="孙尚香",Age=18, Area="吴国" },
                new UserInfo(){ Id=2, UserName="诸诸侠",Age=27, Area="吴国" },
            };

            ViewData["userInfos"] = userInfos;

            return View();
        }

前台:

<div style="margin-top:20px">
    @ViewData["name"]
</div>

<div style="margin-top:20px">

    @{
        List<string> friuts = ViewData["fruits"] as List<string>;
        WebApplication2.Models.UserInfo userInfo = ViewData["userInfo"] as WebApplication2.Models.UserInfo;

        List<WebApplication2.Models.UserInfo> userInfoList = ViewData["userInfos"] as List<WebApplication2.Models.UserInfo>;
    }

    @foreach (var item in friuts)
    {
        <div>@item</div>
    }
</div>

<div style="margin-top:20px">

    <div>
        姓名:<span>@userInfo.UserName</span>,年龄:<span>@userInfo.Age</span>,国家:<span>@userInfo.Area</span>
    </div>
</div>


<div style="margin-top:20px">

    @foreach (var item in userInfoList)
    {
        <div>
            姓名:<span>@item.UserName</span>,年龄:<span>@item.Age</span>,国家:<span>@item.Area</span>
        </div>
    }

</div>





前台向后台传值

 

表单传值

     直接提交表单即可 

地址栏传值

     问号传参 

路由传值

                   使用路由配置传递参数



Action之间传值,页面跳转传值


方法一:路由传值


很简单直接使用 RedirectToAction(string actionName, string controllerName, object routeValues)

这个方法的第三个就是用于传递参数的。

return RedirectToAction("About", new Users() { username = "x", age = 24, address = "j" });

接收:

public ActionResult About(Users user)
{
    return View();
}


传递一个匿名对象也是可以的

return RedirectToAction("About", new { username = "李清照", address = "三国" });

接收:

public ActionResult About(string username, string address)
{
    return View();
}


其实本质也是地址栏传参而已,所以要注意和路由设置冲突问题




方法二:TempData

  public ActionResult News() 
        {
            TempData["name"] = "AJ";

            return RedirectToAction("About");
        }


        public ActionResult About()
        {
            string name = TempData["name"].ToString();

            return View();
        }

tempdata是基于session实现的他是一个临时变量,一次请求中有效,第二次就失效了。
当然如果是一次请求中获取多少也是可以的,所以有些说获取一次会就被销毁的说法是错误的


关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢