2012-10-03 23 views
6

Benim şeklinde iki gizli giriş alanları:ASP.NET MVC 3 HiddenFor JavaScript

<input type="hidden" name="lat" id="lat" value=""/> 
<input type="hidden" name="long" id="long" value="" /> 

ben aşağıdakileri yaparak onların değerini atama ediyorum:

document.getElementById('lat').value = lat; 
document.getElementById('long').value = lng; 

Birisi bana nasıl söyleyebilir misiniz Gizli <input> alanlarını kaldırabilir ve bunları bir @Html.HiddenFor<> ile değiştirebilir ve Javascript’imin HiddenFor’u güncelleştirmesini sağlayabilir miyim? Bunu yapmak istiyorum çünkü açık bir şekilde verileri otomatik olarak bağlayacağım.

@Html.HiddenFor(m => Model.Listing.Location.Latitude); 
@Html.HiddenFor(m => Model.Listing.Location.Longitude); 

ben JavaScript bunu değiştirmek:

Benim HiddenFor anda şuna benzer

document.getElementById('Listing.Location.Latitude').value = lat; 
document.getElementById('Listing.Location.Longitude').value = lng; 

alıyorum konsolda aşağıdaki hata:

Uncaught TypeError: Cannot set property 'value' of null 

Nereye korkunç bir şekilde yanlış gittiğimi görebilir miyim?

cevap

10

Bu alanların Idileri noktaların altını çizmeyecek, adlarının noktaları olacaktır. Bunu deneyin:

document.getElementById('Listing_Location_Latitude').value = lat; 
+0

mükemmel çalıştı:

@Html.HiddenFor(m => m.Listing.Location.Latitude, new {id = "theIdyouWant"}) 

Yani JavaScript kullanarak elemanı alabilirsiniz. Çok çok teşekkür ederim. – Subby

3

Sorununuz, id başka olacaktır. Listing.Location.Latitude, name niteliğidir. Örneğin

:

<input id="General_Site_Name" type="text" name="General.Site_Name" /> 
+0

Çok teşekkür ederim – Subby

4

bu deneyin:

@Html.TextBoxFor(x => x.General.Site_Name) 

olarak üretti.

document.getElementById("theIdyouWant") 
+1

Ah. Böyle bir id belirleyebileceğimi bilmiyordum. Çok teşekkür ederim. – Subby