C# 在MVC中将数据从一个控制器方法传递到另一个控制器方法

C# 在MVC中将数据从一个控制器方法传递到另一个控制器方法,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个页面,在用户点击注册按钮后,有两个文本框“名字”和“姓氏”,API将运行并返回用户信息,并显示另一个页面(视图),该页面包含用户电话、电子邮件,。。填充API返回的信息。我有1个控制器和2个视图。 我从API获取信息并返回第二个视图,但不确定如何用我的信息填充文本框。问题是使用视图中的模型,我有两个模型,每个视图一个。当我调用第二个视图时,出现了以下错误: 传递到字典的模型项的类型为“System.Collections.Generic.dictionary`2[System.Strin

我有一个页面,在用户点击注册按钮后,有两个文本框“名字”和“姓氏”,API将运行并返回用户信息,并显示另一个页面(视图),该页面包含用户电话、电子邮件,。。填充API返回的信息。我有1个控制器和2个视图。 我从API获取信息并返回第二个视图,但不确定如何用我的信息填充文本框。问题是使用视图中的模型,我有两个模型,每个视图一个。当我调用第二个视图时,出现了以下错误:

传递到字典的模型项的类型为“System.Collections.Generic.dictionary`2[System.String,System.Object]”,但此字典需要Models.CreateLogInRequest类型的模型项

这是我的控制器:

    [HttpGet]
    public ActionResult SearchUser()
    {           
        return View();
    }
    [HttpPost]
    public async Task<ActionResult> SearchUser(UserSearchRequest userSearchRequest)
    {
        HttpClient client = new HttpClient();
        object userObject = null;

        string baseUrl = "http://test/api/users";
        if (userSearchRequest.FirstName != null && userSearchRequest.LastName)
        {
            var response = await client.GetAsync(string.Format("{0}{1}/{2}/{3}", baseUrl, "/users", userSearchRequest.FirstName, userSearchRequest.LastName));

            if (response.IsSuccessStatusCode)
            {
                userObject = new JavaScriptSerializer().DeserializeObject(response.Content.ReadAsStringAsync().Result) as object;
            }
        }
        if (userObject != null)
        {
            return View("Create", userObject);
        }
        return View("Create", null);
    }

    [HttpPost]
    public ActionResult Create(CreateLogInRequest createLogInRequest)
    {

        return View();
    }
这是第二种观点:

   @model Models.CreateLogInRequest

   @{
  ViewBag.Title = "Create";
}

 @using (Html.BeginForm("create", "SignUp", FormMethod.Post))
 {
   @Html.AntiForgeryToken()
   <input id="Email" name="Email" type="text" placeholder="Email"   value="@Model.Email" />
   <input id="Phone" name="Phone" type="text" placeholder="Phone"    value="@Model.Phone" />
   <input id="btnSubmit" name="btnSubmit" type="submit" value="CREATE ACCOUNT" />
 }

查看我的评论并尝试以下操作:

[HttpGet]
public ActionResult SearchUser()
{           
    return View();
}

[HttpPost]
public async Task<ActionResult> SearchUser(UserSearchRequest userSearchRequest)
{
    HttpClient client = new HttpClient();
    CreateLogInRequest userObject = null;

    string baseUrl = "http://test/api/users";

    if (userSearchRequest.FirstName != null && userSearchRequest.LastName)
    {
        var response = await client.GetAsync(string.Format("{0}{1}/{2}/{3}", baseUrl, "/users", userSearchRequest.FirstName, userSearchRequest.LastName));

        if (response.IsSuccessStatusCode)
        {
            userObject = new JavaScriptSerializer().DeserializeObject<CreateLogInRequest>(response.Content.ReadAsStringAsync().Result);
        }
    }

    if (userObject != null)
    {
        return RedirectToAction("Create", userObject);
    }

    return View("Create", null);
}

[HttpPost]
public ActionResult Create(CreateLogInRequest createLogInRequest)
{
    return View();
}
[HttpGet]
公共操作结果搜索用户()
{           
返回视图();
}
[HttpPost]
公共异步任务SearchUser(UserSearchRequest UserSearchRequest)
{
HttpClient=新的HttpClient();
CreateLoginRequestUserObject=null;
字符串baseUrl=”http://test/api/users";
if(userSearchRequest.FirstName!=null&&userSearchRequest.LastName)
{
var response=await client.GetAsync(string.Format(“{0}{1}/{2}/{3}”、baseUrl、“/users”、userSearchRequest.FirstName、userSearchRequest.LastName));
if(响应。IsSuccessStatusCode)
{
userObject=new JavaScriptSerializer().DeserializeObject(response.Content.ReadAsStringAsync().Result);
}
}
if(userObject!=null)
{
返回重定向操作(“创建”,用户对象);
}
返回视图(“创建”,空);
}
[HttpPost]
公共操作结果创建(CreateLogInRequest CreateLogInRequest)
{
返回视图();
}

控制器中
可以创建
模型的新实例。CreateLogInRequest
模型并填写从第一个
视图收到的相关属性。如果
Models.CreateLogInRequest
不包含此类属性,则最好在从第一个视图检索的
控制器中使用
TempData
ViewBag
加载这些值,并将其传递到第二个视图。有关ViewBag、ViewData或TempData之间的差异,您可以查看一下。希望这有帮助……

错误消息很有用。您需要告诉
JavascriptSerializer
您正在反序列化的
类型。应该有一个通用版本的
反序列化()
方法。我想您也应该
返回RedirectToAction('Create',userObject)
。使用
返回视图(…)
不会首先转到另一个控制器方法。
   @model Models.CreateLogInRequest

   @{
  ViewBag.Title = "Create";
}

 @using (Html.BeginForm("create", "SignUp", FormMethod.Post))
 {
   @Html.AntiForgeryToken()
   <input id="Email" name="Email" type="text" placeholder="Email"   value="@Model.Email" />
   <input id="Phone" name="Phone" type="text" placeholder="Phone"    value="@Model.Phone" />
   <input id="btnSubmit" name="btnSubmit" type="submit" value="CREATE ACCOUNT" />
 }
public class CreateLogInRequest
  {
    public string Email { get; set; }
    public string Phone { get; set; }
  ....
   }
[HttpGet]
public ActionResult SearchUser()
{           
    return View();
}

[HttpPost]
public async Task<ActionResult> SearchUser(UserSearchRequest userSearchRequest)
{
    HttpClient client = new HttpClient();
    CreateLogInRequest userObject = null;

    string baseUrl = "http://test/api/users";

    if (userSearchRequest.FirstName != null && userSearchRequest.LastName)
    {
        var response = await client.GetAsync(string.Format("{0}{1}/{2}/{3}", baseUrl, "/users", userSearchRequest.FirstName, userSearchRequest.LastName));

        if (response.IsSuccessStatusCode)
        {
            userObject = new JavaScriptSerializer().DeserializeObject<CreateLogInRequest>(response.Content.ReadAsStringAsync().Result);
        }
    }

    if (userObject != null)
    {
        return RedirectToAction("Create", userObject);
    }

    return View("Create", null);
}

[HttpPost]
public ActionResult Create(CreateLogInRequest createLogInRequest)
{
    return View();
}