How to pass value from one action to another actio

2019-04-08 22:37发布

问题:

Hi I am developing an application in MVC3. and i am stuck at one place. Everytime when control goes to IIndex1 action its argument value has become 0. But it should be same as value in IIndex action argument. I have used session, ViewBag, ViewData but my problem is remains. Please suggest me.

        public ActionResult GetMDN(string msisdn)
        {
            number = msisdn.Substring(0, msisdn.IndexOf('$'));
            if (number.ToLower() != "unknown" && number.Length == 12)
            {
                number = number.Remove(0, 2);
            }
            Session["msdresponse"] = number;
            Session["moptr"] = msisdn.Substring(msisdn.LastIndexOf('$') + 1);
            number = msisdn;
            int sngid=int.Parse(ViewData["isongid"].ToString());
            return RedirectToAction("IIndex1", new { iid = sngid });
        }

        public ActionResult IIndex(int id)
        {
            ViewBag.isongid = id;
            ViewData["isongid"] = id;
            Response.Redirect("http:XXXXXXXXXXXXXXXX");
            return RedirectToAction("GetMDN");
        }

        public ActionResult IIndex1(int iid)
        {

        }

回答1:

You can use TempData.You can pass every types of data between to action, whether they are in same controller or not. Your code should be something like it:

    public ActionResult GetMDN(string msisdn)
    {
        int sngid=10;

        TempData["ID"] = sngid;

        return RedirectToAction("IIndex");
    }

    public ActionResult IIndex()
    {

        int id = Convert.ToInt32(TempData["ID"]);// id will be 10;
    }


回答2:

Use TempData instead of ViewData/ViewBag to store data that should persist after redirect. ViewData/ViewBag allow to pass value from controller to view.

Something to read on this subject:

http://www.codeproject.com/Articles/476967/WhatplusisplusViewData-cplusViewBagplusandplusTem

http://msdn.microsoft.com/en-us/library/dd394711(v=vs.100).aspx