簡體   English   中英

在ASP.NET MVC中將數據從一個控制器傳遞到另一個

[英]Passing data from one controller to another in asp.net mvc

我是ASP.NET MVC的新手。 我有RestCallcontroller類。 我想將數據從Restcontroller傳遞到Home Controller 這是RestController

public class RestCallController : Controller
{
    public  string loginJsonString;
    Result result = new Result();

    // GET: RestCall
    public async Task<ActionResult> RunAsync(string a, string b)
    {

        using (var handler = new HttpClientHandler { UseDefaultCredentials = true })
        using (var client = new HttpClient(handler))
        {

            var byteArray = Encoding.ASCII.GetBytes("username:password");
            client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
            client.BaseAddress = new Uri("XXX");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage response = await client.GetAsync("XXX");

            if (response.IsSuccessStatusCode)
            {
                //Get the response
                 loginJsonString = await response.Content.ReadAsStringAsync();
                result.loginJsonStringop = loginJsonString;
                //Json deserialization
                VehicleResponse vehicleobj = JsonConvert.DeserializeObject<VehicleResponse>(loginJsonString);
                List<string> modelList = new List<string>();
                List<string> descriptionList = new List<string>();

                foreach (Vehicle veh in vehicleobj.Vehicles)
                {
                    var model = veh.Model;
                    var Description = veh.Description;
                    modelList.Add(model);
                    var modellist = modelList;
                    descriptionList.Add(Description);
                }
            }
        }
        return RedirectToAction("Index", "HomeController",new { resultop =result });
    }
}

以下是我的HomeController

public class HomeController : Controller
{
    string a;
    string b;

    // GET: Home
    public ActionResult Index(Result resultop)
    {
        RestCallController restcallController = new RestCallController();
        restcallController.RunAsync(a,b);
        resultop.loginJsonStringop = restcallController.loginJsonString;
        return View(resultop);
    }
}

這是我的模型課。

public class Result
    {
        public string loginJsonStringop { get; set; }
        public string modelop { get; set; }
        public string descriptionop { get; set; }
    }

我想要將loginJsonString,modelList,descriptionList的值傳遞給Home Controller index()方法,並在索引視圖中查看它。 如果您有任何建議,請幫助我。

MVC中有TempData ,可以將數據從一個控制器傳遞到另一個控制器。 您甚至可以參考答案

在第一個控制器中,您可以執行某些操作。

TempData [“ jsonData”] = ANY_OBJECT;

然后在您的家庭控制器中就可以得到它。

var object = TempData [“ jsonData”];


更新


臨時數據限制

但是有一個陷阱..臨時數據僅在第一次調用控制器時可用。 如果您在rest控制器之后重定向到home pass,則可以在home控制器中獲取臨時數據,但是如果您進行了一些重定向,然后您定向到home,並嘗試獲取臨時數據,則它將不起作用。 如果需要的話,可以考慮創建適當的模型並將其傳遞給家庭控制器是一個很好的解決方案。

更新您嘗試使用模型傳遞數據,然后您可以做一些事情。 -

public async Task<ActionResult> RunAsync(string a, string b)
{
  ...
  ...
  ...
  Result obj = new Result();
  obj.loginJsonStringop = "VALUE_OF_FIELD";
  ...
  ...
  ...
  return RedirectToActtion("Index", "HomeController",new { resultop =result });
}

然后主控制器必須在“ Index操作中接收此模型。

public class HomeController : Controller
{       
    public ActionResult Index(Result resultop)
    {
        // do whatever you want to do with your "resultop" instance of type "Result"
        var value = resultop.loginJsonStringop;    // "VALUE_OF_FIELD"

        return View();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM