【发布时间】:2014-06-06 21:02:35
【问题描述】:
我正在尝试制作一个网页,允许用户使用输入框和保存按钮提交有关对象的信息。到目前为止,我发现使用字符串、整数、布尔值和双精度值等基本类型让页面为名称、数字等工作相对容易。我可以在输入框中输入这些基本信息,然后通过点击保存按钮将信息保存到数据库中。
但是,我需要开始工作的最后一个输入字段是位置字段。该字段保存为一个名为 LatLng 的复杂类型,其中包含纬度和经度值。我已经能够使用 razor HTML 表单元素 EditorFor() 正确显示输入框。它会自动创建两个输入框,一个用于 Lat,一个用于 Long。
前:
但似乎无论我在这些框中输入什么,存储在数据库中的值始终是 lat:0, long:0。
通过在我的模型文件中设置断点,我发现当它到达模型时,Location 中“set”中的“value”变量已经是 {0,0}。
所以我的问题是: 我的代码是否有问题会导致从 EditorFor() 文本框传递的值在到达我的模型文件之前归零?或者有什么方法可以让我更深入地调试这个?
此代码来自我的视图页面。我删除了我认为不相关的所有内容以及除名称和位置之外的所有其他字段,以显示对我有用的事物和无效的事物:
<div class="row">
<div class="col-md-12">
<section id="createGenericModelForm">
@using (Html.BeginForm("Create", "GenericModel", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
<div class="form-group">
@Html.LabelFor(m => m.Name, new { @class = "col-md-2 control-label" })
<div class="col-md-6">
@Html.TextBoxFor(m => m.Name, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Location, new { @class = "col-md-2 control-label" })
<div class="col-md-6">
@Html.EditorFor(m => m.Location, new { @class = "form-control" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
}
</section>
</div>
</div>
除了名称和位置之外,我还从模型页面中删除了所有内容:
public class GenericModel
{
public GenericModel()
{
Location = new LatLng(0, 0);
}
[Required]
[Display(Name = "Name")]
public string Name { get; set; }
private LatLng _Location;
[Display(Name = "Location")]
public LatLng Location
{
get
{
return _Location;
}
set
{
_Location = value ?? new LatLng(0, 0); //WHEN DEBUGGING THIS IS WHERE value = {0,0}
}
}
}
这是定义复杂类型 LatLng 的代码:
[ComplexType]
public class LatLng : IEquatable<LatLng>
{
public LatLng(){ }
public double Latitude { get; private set; }
public double Longitude { get; private set; }
public LatLng(double latitude, double longitude)
{
Latitude = Math.Min(Math.Max(-90.0, latitude), 90.0);
Longitude = Math.Min(Math.Max(-180.0, longitude), 180.0);
}
public override string ToString()
{
return string.Format("{0},{1}", Latitude, Longitude);
}
public override bool Equals(object obj)
{
return obj is LatLng && this.Equals((LatLng)obj);
}
public bool Equals(LatLng other)
{
return this.Latitude == other.Latitude
&& this.Longitude == other.Longitude;
}
}
我是使用这些语言编程的新手,所以请耐心等待。另外,如果您需要更多代码,请告诉我。
【问题讨论】:
标签: c# asp.net-mvc-4 twitter-bootstrap-3 razor-2