有关ASP.NET MVC表单发布方案的问题

时间:2008-11-16 07:50:52

标签: asp.net-mvc

我目前有一个用户控件,用于/ Address / Edit和/ Address / Create页面。此用户控件只需在其中包含以下代码即可向系统提交新地址:

<% 
    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”]中,然后会向最终用户显示可能的地址。

现在,这可以正常显示地址,但我真正想要的是将列表呈现为超链接列表,以便用户可以单击相应的地址,表单将使用该地址而不是文本框中的那个。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

类似的东西:

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

你有

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

您也可以将其放在隐藏字段中,表示您不需要对此地址进行Google地图搜索。也就是说,如果提供了HiddenStreetAddress,则只需在不使用查找的情况下使用。如果没有,请在StreetAddress上进行Google查询。如果有多个结果,则显示结果。如果没有,则使用提供。