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