2016-04-13 13 views
1

Ich bin neu in MVC, ich erstelle eine Seite, die den Vornamen und den Nachnamen in Textfelder erhalten und eine API ausführen, um die Kundeninformationen zu erhalten. Das userObject im folgenden Code enthält die Benutzerinformationen im Jason-Format. Wenn ich den Wert von der API zurückbekomme, muss ich zu einer anderen Seite (Ansicht) mit Benutzer-Info-Textfeldern umleiten und die Textfelder mit den Informationen, die ich von der API erhalten habe, ausfüllen.Umleiten zu einer anderen Ansicht und übergeben Json-Wert

Ich bin mir nicht sicher, wie ich zu einer anderen Ansicht umleiten kann und wie Jason-Formatdaten tragen, um die Textfelder dort zu füllen. Ich schreibe alle in 1 Controller und 2 Ansichten.

Dies ist mein Controller-Code:

[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(); 
    } 

Dies ist die erste Ansicht, die die Vornamen und Nachnamen erhalten:

@{ 
    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"  /> 
    } 

Und das ist die zweite Ansicht, dass ich diese gerne füllen Textfelder mit den Daten, die ich von der API bekomme.

@{ 
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" /> 
} 

Antwort

2

Es ist keine Umleitung erforderlich, geben Sie einfach die Ansicht zurück, die in der Post-Controller-Aktion angezeigt werden soll.

[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 
} 

Sie Sicht wäre so etwas wie

@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" /> 
} 

aber suchen, um zu tun, dass Sie Deserialisieren auf ein anonymes Objekt anhalten müssen und stattdessen eine richtige Modellklasse machen zu deserialisieren.

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

Deserializing a JSON file with JavaScriptSerializer()

+0

, dass es, Dank. – Alma

+0

Wissen Sie, wie ich Zugriff auf Werte von userObject in Create() -Methode (Ansicht) erhalten kann. Ich habe den Wert von HTML-Textfeldern mit den Werten von userobject gefüllt. – Alma

+0

Aktualisierte Antwort ... –

Verwandte Themen