CodeProject.com, "Using KnockoutJS in your ASP.NET applications" adresinde yayınlanan bu makaleyi kullanarak, ASP.NET kullanarak yeniden kullanılabilir, veri yüklü bir açılır liste oluşturmaya çalışıyorum 3.5 Web Formları, ancak istemci tarafında veri bağlama için KnockoutJS kullanır. Bu açılır listenin birden çok bağımsız örneği, aynı sayfada bağımsız olarak yaşayabilmelidir.ASP.NET WebForms sunucu tarafı yayınları arasında ViewModel Kalıcı bağlantı noktası ...
Şu ana kadar CodeProject.com yayını işlerimi nasıl ayarlayacağımı yönlendirmek için çok değerli oldu ve sunucu ve istemci arasında güncellenmiş ViewModel verilerini bir JSON dizesi olarak ileri geri iletiyorum. Bir nesne (hem sunucuda hem de istemcide). Ne takılıyorum basit kısmı ne olmalıydı; ViewModel'i aşağı açılan listeye bağlama!
JSON dizesini gizli bir alana yükleyerek başlıyorum. Bölgeler ve tek bir SelectedRegion listesi içerir.
<input type="hidden" id="ddlRegionKO_hdnRegionListVMStorage" value="{"Regions":[{"RegionName":"Mid Atlantic USA","RegionId":2},{"RegionName":"Mid West USA","RegionId":10},{"RegionName":"North Central USA","RegionId":5},{"RegionName":"North East USA","RegionId":1},{"RegionName":"North West USA","RegionId":7},{"RegionName":"Other","RegionId":9},{"RegionName":"South Central USA","RegionId":6},{"RegionName":"South East USA","RegionId":3},{"RegionName":"South West USA","RegionId":8}],"SelectedRegion":{"RegionName":"North Central USA","RegionId":5}}" />
Sonra ko.utils.parseJson()
işlevini kullanarak bir JavaScript Nesne içine bu dizeyi dönüştürmek çalıştırın.
var stringViewModel = document.getElementById("ddlRegionKO_hdnRegionListVMStorage").value;
var ddlRegionKO_pnlRegionDDLContainer_ViewModel = ko.utils.parseJson(stringViewModel);
Sonra ko.observable
ve ko.observableArray
yöntemlerle (bu refactored gerekir edilecek olan bölümlerden biri, ancak kavramın bir kanıtı olarak o yeter) içine mülkiyet tanımlarını dönüştürün.
//
// Convert all the model properties to KO Propety/Methods
for (var propertyName in ddlRegionKO_pnlRegionDDLContainer_ViewModel) {
switch(propertyName.toUpperCase())
{
//
// Multiple Region objects are stored as an array in the regions property.
case "REGIONS":
ddlRegionKO_pnlRegionDDLContainer_ViewModel[propertyName] = ko.observableArray(ddlRegionKO_pnlRegionDDLContainer_ViewModel[propertyName]);
break;
//
// Only a single region may be selected at any time.
case "SELECTEDREGION":
ddlRegionKO_pnlRegionDDLContainer_ViewModel[propertyName] = ko.observable(ddlRegionKO_pnlRegionDDLContainer_ViewModel[propertyName]);
break;
};
};
bu göz önüne alındığında,
ko.applyBindings(ddlRegionKO_pnlRegionDDLContainer_ViewModel);
... listesi açılan doldurulması ve applyBindings
yöntemi çağrıldığında SelectedRegion seçilen beklenebilir Ben JSFiddle de hep birlikte bu koyduk .. here ... Bir şeye baktığımı sanıyorum ama ne olabileceğini göremiyorum. Her şey bana doğru görünüyor.
Kimse benim gördüğüm bir şeyi görebiliyorsa son derece minnettar olurum!
sayesinde -g
TEŞEKKÜRLER! Cevabını kaldırdı, çünkü "optionsValue" özelliğinden habersizdim ve Json verilerinden bölge listesiyle yüklenmiş olan açılır listeyi aldım. Ama bu sadece yarı yol. Bağlamaya göre, SelectedRegion'un açılır listeden önceden seçilmiş olmasını beklerim (ModelView'da tanımlanmıştır). Ayrıca aşağı açılan listeye bir metin kutusu bağlama girişiminde bulunduğumda (data-bind = "text: SelectedRegion(). RegionName") hiçbir şey olmuyor. Yani belki de "SelectedRegion" ı tanımlama yolumda yanlış bir şey var mı? Tekrar teşekkürler!! –
@ GaryO.Stenstrom Üzgünüz, ilk defa bunu görmedim. Düzenlememe bak. Uzun lafın kısası, çözümüm seçilen değeri ayarlayacak, ancak seçilen değeri bir nesneye nasıl bağlayacağınız konusunda biraz araştırma yapmanız gerekecek. Sağladığım bağlantıya bir göz atın ve bunun yardımcı olup olmadığını görün, ya da nakavt dokümantasyonunu okumaya başlayın. – hawkke
JsFiddle'a (http://jsfiddle.net/Ds44T/6/) ilişkili bir metin kutusu ekledim ancak yalnızca başka bir tarayıcıda değil, IE'de çalışıyor. –