2009-09-24 43 views
0

我使用Microsoft Ajax來動態填充聯繫人列表,給定一個json數據包。我的代碼如下:問題與Sys.UI.DataView和javascript

function fillContactsFromData(contacts) { 
    // this is just for debug to let me know that the data is correct 
    if (contacts.length > 0) { 
     alert('ID: ' + contacts[0].ID + ', Name: ' + contacts[0].Name); 
    } 

    $create(Sys.UI.DataView, { data: contacts }, null, null, $get('contacts')); 
} 

相關的HTML如下:

<div id="contacts" class="sys-template"> 
    <a onclick="removeContact('{{ ID }}');"><img src="remove.png" /></a> 
    <a class="contact" rel="/Contacts/Index/{{ ID }}">{{ Name }}</a><br /> 
</div> 

第<一個>標籤是用來觸發一個腳本刪除的聯繫人,而第二個使用了jQuery提示懸停框中的細節(細節略過此處)。

我遇到的問題是HTML呈現不正確。正在生成的是:

<div id="contacts"> 
    <a><img src="remove.png" /></a> 
    <a class="contact" rel="/Contacts/Index/{{ ID }}">Darren Oster</a><br /> 
</div> 

警報框指示帶有有效ID(Guid)和名稱(「Darren Oster」)的數據。名稱正在被正確渲染,但ID字段未在'rel'屬性中呈現,並且'onclick'語句被完全刪除。

這是MS Ajax的限制還是我做了一些不正確的事情?

在此先感謝。

回答

1

如果一個屬性要包含任何{{}}表達式,它必須是整個值。

是: 富= 「{{ 'ABC' + ID}}」

否:未產生 富= 「ABC {{ID}}」

至於的onclick,它可能是的,但是無論您使用什麼檢查都不會向您顯示該值,因爲它使用直接的element.onclick而不是addAttribute()來設置。

0

InfinitiesLoop把我在正確的軌道上,所以這裏是最後的答案(如果任何人遵循這條道路)...

首先,我用MS AJAX 4.0的早期預覽。我現在已經更新了預覽版5,而且工作方式略有不同。下面是最終的HTML(JavaScript的不變):

<div id="contacts" class="sys-template"> 
    <a sys:onclick="{{ 'removeContact(\'' + ID + '\');' }}"><img src="remove.png" /></a> 
    <a class="contact" sys:rel="{{ '/Contacts/Index/' + ID }}">{{ Name }}</a><br /> 
</div> 

還要注意的是第五個預覽版需要「SYS:」前綴在具有數據綁定值的任何屬性,所以

<option value="{{ Value }}">{{ Text }}</option> 

內<select>變爲

<option sys:value="{{ Value }}">{{ Text }}</option>