0

Microsoft Ajax を使用して、json パケットを指定して、連絡先のリストを動的に入力しています。私のコードは次のとおりです。

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>

最初の <a> タグは連絡先を削除するスクリプトを起動するために使用され、2 番目のタグは 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 の制限ですか、それとも間違ったことをしていますか?

前もって感謝します。

4

2 に答える 2

1

属性に {{ }} 式を含める場合は、値全体である必要があります。

はい: foo="{{ 'abc' + ID }}"

いいえ: foo="abc{{ ID }}"

onclick が生成されていないのはおそらくそうですが、addAttribute() ではなく element.onclick の直接セットで設定されているため、使用している検査では値が表示されません。

于 2009-09-24T01:25:52.650 に答える
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>

また、プレビュー 5 では、データ バインドされた値を持つすべての属性に「sys:」プレフィックスが必要であることにも注意してください。

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

<select> の内部は次のようになります

<option sys:value="{{ Value }}">{{ Text }}</option>
于 2009-09-24T02:00:21.873 に答える