【发布时间】:2013-12-03 07:56:10
【问题描述】:
在我的 MVC-4 应用程序中,我使用 javaScript 从地理定位中获取位置,并在隐藏字段中设置纬度、经度和准确性。隐藏字段中的值设置正确,但在回发期间显示为空。
这是我的代码:
剃须刀:
@using (Html.BeginForm()
{
@Html.HiddenFor(x => x.CurrentLocation.Latitude)
@Html.HiddenFor(x => x.CurrentLocation.Longitude)
@Html.HiddenFor(x => x.CurrentLocation.Accuracy)
<input type="submit" name="command" value="Start" />
}
JavaScript:
function SetLocation(position) {
console.log("{0},{1},{2}".format(position.coords.latitude, position.coords.longitude, position.coords.accuracy));
$("#CurrentLocation_Latitude").val(position.coords.latitude);
$("#CurrentLocation_Longitude").val(position.coords.longitude);
$("#CurrentLocation_Accuracy").val(position.coords.accuracy);
}
$(document).ready(function () {
$('form').submit(function () {
LocationService.getCurrentLocation(SetLocation);
});
});
但是如果我写了这段代码,那么它就可以工作了
$(document).ready(function () {
$('form').submit(function () {
$("#CurrentLocation_Latitude").val(100);
$("#CurrentLocation_Longitude").val(100);
});
});
这会向控制器发送正确的值。
我不明白为什么会这样。
提前致谢。
更新 1:
型号:
[ComplexType]
public class Location
{
public Location()
{
}
public Location(double latitude, double longiture, double? accuracy = null)
{
Latitude = latitude;
Longitude = longiture;
if (accuracy.HasValue)
Accuracy = accuracy.Value;
}
[DisplayName("Latitude : ")]
public double? Latitude { get; set; }
[DisplayName("Longitude : ")]
public double? Longitude { get; set; }
public double? Accuracy { get; set; }
}
public class ServiceInfoEditMetadata : ServiceInfo
{
public Int64 MachineId { get; set; }
[DisplayName("Client Name :")]
public string ClientName { get; set; }
[DisplayName("Site Name :")]
public string SiteName { get; set; }
public Location CurrentLocation { get; set; }
[DisplayName("Client Username :")]
public string ClientUsername { get; set; }
[DisplayName("Client Password :")]
public string ClientPassword { get; set; }
}
控制器:
public ActionResult Edit(Int64 id, ServiceInfoEditMetadata serviceInfoEditMetadata, string command)
{
try
{
switch (command)
{
case "Add":
AddMachineToServiceInfoDetails(serviceInfoEditMetadata);
return View(serviceInfoEditMetadata);
case "Start":
_serviceInfoService.StartService(serviceInfoEditMetadata, User.Identity.Name);
return RedirectToAction("Edit", serviceInfoEditMetadata.Id);
case "Update":
if (!ModelState.IsValid) return View(serviceInfoEditMetadata);
_serviceInfoService.UpdateServiceInfo(serviceInfoEditMetadata, User.Identity.Name);
return RedirectToAction("List");
}
return View(serviceInfoEditMetadata);
}
catch (Exception ex)
{
ModelState.AddModelError("ServiceInfoEditError", ex.Message);
return View(serviceInfoEditMetadata);
}
}
【问题讨论】:
-
您能否向控制器显示您的数据发布在哪里以及您的数据模型?
-
其他参数绑定正确吗?
-
如果您尝试过其他测试解决方案,绑定必须有效,因此请在 LocationService.getCurrentLocation(SetLocation) 周围添加一些警告语句,尤其是确定 SetLocation 位置参数是否有效的 SetLocation 方法。
-
您的客户端和服务器之间可能存在文化设置不匹配。你的服务器文化是什么?我猜它有一个小数点分隔符是逗号而不是点的文化。因此,如果您发布值:
23,70922它应该可以工作。
标签: c# javascript .net asp.net-mvc asp.net-mvc-4