2016-04-13 2 views
1

Я новичок в MVC, я создаю страницу, которая получает имя и фамилию в текстовых полях и запускает api для получения информации о клиенте. UserObject в приведенном ниже коде содержит информацию о пользователе в формате Jason. Когда я получаю значение обратно из API, мне нужно перенаправить на другую страницу (представление) с текстовыми полями информации пользователя и заполнить эти текстовые поля информацией, полученной мной из API.Перенаправить на другое представление и передать значение json

Я не уверен, как я могу перенаправить на другой вид и как переносить формат Jason Data для заполнения текстовых полей. Я пишу все в 1 контроллере и 2 просмотрах.

Это мой код контроллера:

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

     string baseUrl = "http://test/api "; 
     if (userSearchRequest.LastName != null && userSearchRequest.Zip != null && userSearchRequest.Ssn !=null) 
     { 
      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 Json(new { user = userObject }, JsonRequestBehavior.AllowGet); 
     } 
     return Json(string.Empty); 
    } 
    //this is where I like to redirect to and fill the textboxes with user Info 
    [HttpPost] 
    public ActionResult Create() 
    { 
     return View(); 
    } 

Это первый вид, что получить первое имя и фамилия:

@{ 
    ViewBag.Title = "SearchUser"; 
    } 
    @using (Html.BeginForm("SearchUser2", "SignUp", FormMethod.Post)) 
    { 
    @Html.AntiForgeryToken() 
    <input id="FirstName" name="FirstName" type="text" placeholder="FirstName" /> 
<input id="LastName" name="LastName" type="text" placeholder="LAST NAME" /> 
<input id="btnSubmit" name="btnSubmit" type="submit" value="SIGN UP TODAY"  /> 
    } 

И это второй вид, что мне нравится, чтобы заполнить эти текстовые поля с данными, которые я получаю от API.

@{ 
ViewBag.Title = "Create"; 
} 
@using (Html.BeginForm("create", "CreateLogin", FormMethod.Post)) 
{ 
@Html.AntiForgeryToken() 
<input id="Email" name="Email" type="text" placeholder="Email" /> 
<input id="Phone" name=" Phone " type="text" placeholder=" Phone " /> 
<input id="Address" name=" Address " type="text" placeholder=" Address " /> 
<input id="btnSubmit" name="btnSubmit" type="submit" value="Create" /> 
} 

ответ

2

Не требуется перенаправление, просто верните представление, которое вы хотите отобразить в действии постконтроллера.

[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 "; 
    if (userSearchRequest.LastName != null && userSearchRequest.Zip != null && userSearchRequest.Ssn !=null) 
    { 
     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); // TODO go somewhere else if null 
} 

Вы вид будет выглядеть как

@model SomeModel 
@{ 
    ViewBag.Title = "Create"; 
} 
@using (Html.BeginForm("create", "CreateLogin", FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken() 
    @Html.TextBoxFor(model => model.Email, new { placeholder = "Email" }) 
    @Html.TextBoxFor(model => model.Phone, new { placeholder = "Phone" }) 
    ... 
    <input id="btnSubmit" name="btnSubmit" type="submit" value="Create" /> 
} 

но для того, чтобы это сделать, вам нужно остановить десериализации анонимного объекта и вместо того, чтобы сделать правильный класс модели для десериализации в.

public class SomeModel 
{ 
    public string Email { get; set; } 
    public string Phone { get; set; } 
    ... 
} 

Deserializing a JSON file with JavaScriptSerializer()

+0

, что это, спасибо. – Alma

+0

Знаете ли вы, как я могу получить доступ к значениям userObject в методе Create() (view). Я написал, чтобы заполнить значение текстовых полей HTML значениями из пользовательского объекта. – Alma

+0

Обновленный ответ ... –

Смежные вопросы