2008-11-16 11 views
1

J'ai actuellement un contrôle utilisateur qui est utilisé sur une page/Adresse/Modifier et une adresse/Créer. Ce contrôle utilisateur a simplement le code suivant dans à soumettre une nouvelle adresse au système:Question concernant un scénario de publication de formulaire ASP.NET MVC

<% 
    using (Html.BeginForm()) 
    { 
%> 
     <table> 
      <tr> 
       <td>Street Address</td> 
       <td> 
        <%= Html.TextBox("StreetAddress", (ViewData.Model != null) ? ViewData.Model.StreetAddress : "") %> 
        <%= Html.ValidationMessage("Address.StreetAddress") %> 
       </td> 
      </tr> 
     </table> 
     <%= Html.SubmitButton() %> 
     <% 
      if (ViewData["GeocodeResults"] != null) { 
     %>  
      <p> 
       Google maps found the following addresses that matched the address you entered. Please select 
       the appropriate address. If none of these addresses are correct, try reentering the address 
       again and be as specific as possible. 
      </p> 
      <ul> 
       <% 
        foreach (GeocodeResult geocodeResult in (List<GeocodeResult>)ViewData["GeocodeResults"]) { 
       %> 
         <li> 
          <%= geocodeResult.StreetAddress %> 
         </li> 
       <% 
        } 
       %> 
      </ul> 
     <% 
      } 
     %> 
<% 
    } 
%> 

Pour résumer le code ci-dessus, ce qu'il fait est dans le contrôleur, il interroge Google Maps géocodage l'adresse dans le zone de texte (c.-à-d. le transforme en un ensemble de coordonnées de longitude/latitude). Lorsque Google Maps renvoie plusieurs résultats, je stocke ces résultats dans ViewData ["GeocodeResults"], qui affiche ensuite les adresses possibles pour l'utilisateur final. Maintenant, cela fonctionne très bien pour afficher les adresses, mais ce que je veux vraiment, c'est que cette liste soit rendue comme une liste de liens hypertexte afin que l'utilisateur puisse cliquer sur l'adresse appropriée et le formulaire sera soumis avec cette adresse à la place de celui dans la zone de texte. Est-ce qu'il y a un moyen de faire ça?

Répondre

2

Quelque chose comme:

<a href='javascript:void(0);' onclick='submitAddress(this);'> 
    <%= geocodeResult.StreetAddress %></a> 

où vous avez

function submitAddress(link) { 
    $('input#streetAddress:first').text(link.innerHtml); 
    $('input#submit').click(); 
} 

Vous pouvez également déposer dans un champ caché qui signifierait que vous n'avez pas besoin de faire la recherche sur la carte Google pour cette adresse. C'est-à-dire, si HiddenStreetAddress est fourni, utilisez simplement avec sans recherche. Si ce n'est pas le cas, effectuez une recherche Google sur StreetAddress. Si plus d'un résultat, puis afficher les résultats. Si non, utilisez alors fourni.

Questions connexes