Javascript Html.EditorFor,带有文本框ID,用于jQuery

Javascript Html.EditorFor,带有文本框ID,用于jQuery,javascript,google-maps,google-maps-api-3,asp.net-mvc-5,editorfor,Javascript,Google Maps,Google Maps Api 3,Asp.net Mvc 5,Editorfor,我正在用MVC5/Razor3、Bootstrap3.x开发一个ASP.NET4.0(.NET4.5)web应用程序。在这个特定的控制器中,我使用了GoogleMapsAPIv3 基本上,在许多其他东西中,我有两个文本框,一个用于纬度,另一个用于经度。然后我还有一个带有一个标记的谷歌地图 当用户右键单击某个点时,我希望为标记设置当前的click Lat/Long,并更新Lat/Long文本框并将地图居中 当用户将标记拖动到一个新位置时,同样的情况也会发生,两个文本框都会使用新标记位置进行更新 除

我正在用MVC5/Razor3、Bootstrap3.x开发一个ASP.NET4.0(.NET4.5)web应用程序。在这个特定的控制器中,我使用了GoogleMapsAPIv3

基本上,在许多其他东西中,我有两个文本框,一个用于纬度,另一个用于经度。然后我还有一个带有一个标记的谷歌地图

当用户右键单击某个点时,我希望为标记设置当前的click Lat/Long,并更新Lat/Long文本框并将地图居中

当用户将标记拖动到一个新位置时,同样的情况也会发生,两个文本框都会使用新标记位置进行更新

除了添加了GoogleMap之外,表单的其余部分与VisualStudio的“使用EF CRUD添加视图”模板完全相同

现在的问题是。。。VS模板创建的文本框控件代码不允许您设置控件ID,我可以使用jQuery/Javascript代码来更新文本框,但所有映射行为(标记替换、居中等)都有效:

在这个网站的某个地方,有人建议另一个人使用TextBoxFor,而不是EditorFor,后者似乎让你为文本框指定一个ID。然而,这使得两个文本框都以标准形式呈现,这和其他文本框的外观完全不一致

因此,我选择了另一个建议来替换该代码:

@Html.EditorFor(model => model.latitude, null, "mylatitude", new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.latitude, "", new { @class = "text-danger" })
@Html.EditorFor(model => model.latitude, null, "mylongitude", new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.longitude, "", new { @class = "text-danger" })
使用此表单时,文本框看起来与其他文本框类似,当我移动标记或右键单击纬度/经度时,文本框将使用相应的坐标进行更新,因为我可以使用我在EditorFor中声明的ID通过JavaScript对其进行寻址

但是,当我提交表单时,文本框上的纬度/经度值都不会在模型上填充,其他模型值也会正确填充。如果我恢复到原始的EditorFor(我无法指定ID),那么值将正确提交


因此,文本框得到更新(正确的ID)有点奇怪,但不知何故,通过Javascript填充的实际文本框值没有填充到模型中。

当您使用重载时

@Html.EditorFor(model => model.latitude, null, "mylatitude", ..
第三个参数是将name属性设置为
mylatitude
,该属性与属性名称
latitude
不匹配,因此
DefaultModelBinder
无法匹配这些值

为什么不能使用生成的ID
@Html.EditorFor(model=>model.longitude,…
,它将是“经度”,或者使用
TextBoxFor
并添加相关的类名,以便将其样式设置为与
@Html.EditorFor
生成的输出相同

@Html.EditorFor(model => model.latitude, null, "mylatitude", ..