我有一个设置两个值(经度/纬度)的javascript函数,并尝试回发到控制器中的action方法。我的操作方法被点击,我逐步执行该函数,然后查看到html视图,但我的页面永远不会被控制器正在调用的新视图刷新。纬度和经度被传递给我的控制器greate,它只是没有刷新视图。有什么理由吗?
function editLocation() {
var place = autocomplete.getPlace();
var name = place.name;
var lat = place.geometry.location.lat();
var lon = place.geometry.location.lng();
//alert("This function is working!");
//alert(place.name);
//alert(place.address_components[0].long_name);
var requestData = {
lati: lat,
longi: lon
};
$.ajax({
url: '/Home/Results',
type: 'POST',
data: requestData,
dataType: 'json'
});
}
这是我已经部分注释掉的原始get调用的表单。
@*@using (Html.BeginForm("Results", "Home", FormMethod.Get))
{*@
<p>
<input type="text" name="location" id="location" placeholder="Search For Classes" />
</p>
<p>
<input class="btn btn-primary btn-lg" value='Submit' type="submit" onclick="editLocation();" />
</p>
@*}*@
这是我的控制器。
public ActionResult Results(string location, string lati, string longi)
{
var repo = new YogaSpaceRepository();
/// 1000 Ocean Ave
DbGeography myLocation = DbGeography.FromText("POINT(-122.453164 37.723057)");
IQueryable<YogaSpace> spaces = repo.AllWithinDistance(myLocation);
return View(spaces);
}
问题 - 在表单中使用隐藏变量将经度/纬度数据传递给控制器会更容易吗?似乎是这样,但不确定这是否是建议的做法。
答案 0 :(得分:1)
您可以使用已注释掉的表单。为&#39; lat&#39;添加两个HiddenFor助手。和&#39; lon&#39;。运行自动填充,然后使用this approach设置两个隐藏字段的值。
如果您只是希望用户搜索某个位置然后发送到另一个页面,那么在这种情况下使用ajax是没有意义的。但是,我建议使用ajax在同一页面上加载搜索结果。它看起来会更酷:)