2008-11-16 53 views
1

我目前有一個用戶控件,用於/地址/編輯和/地址/創建頁面。此用戶控件只是在它下面的代碼提交新的地址系統:有關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> 
     <% 
      } 
     %> 
<% 
    } 
%> 

總結上面的代碼,它的作用是在控制器,它查詢谷歌地圖進行地理編碼的地址文本框(即將其變成一組經度/緯度座標)。當Google地圖返回多個結果時,我會將這些結果存儲到ViewData [「GeocodeResults」]中,然後向最終用戶顯示可能的地址。

現在,這對於顯示地址工作正常,但我真正想要的是將該列表呈現爲超鏈接列表,以便用戶可以單擊適當的地址並將該表單與該地址一起提交在文本框中的一個。有沒有辦法做到這一點?

回答

2

喜歡的東西:

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

,你必須

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

你也可以將它放在一個隱藏字段,將意味着你不需要爲此做了谷歌地圖搜索地址。也就是說,如果提供了HiddenStreetAddress,只需在不查找的情況下使用。如果不是的話,那麼在Google地址上進行Google查找。如果有多個結果,則顯示結果。如果不是,則使用提供。