1

私の ASP.NET MVC 4 Web アプリケーションには、次の 2 つのモデルがあります。

  1. Blockプロパティを持っていますBlock LinkedBlock
  2. BlockCollection複数含まれていますBlock。のすべてのBlockインスタンスは、Block.LinkedBlockにもあることが保証されていBlockCollectionます。

今、私がやりたいことは次のとおりです:にリンクされたブロックがある
場合、リンクされたブロックのテキストをこのブロックのテキストに設定Blockするハンドラーを取得する必要があります。onchange

原則として、これは非常に簡単です。

if (Model.LinkedBlock != null)
{
    var onChange = string.Format("setText({0}, this.text);", linkedBlockId);
    @Html.TextBoxFor(m => m.Text, new { onchange = onChange });
}
<script type="text/javascript" language="javascript">
    function setText(id, text) {
        $("#" + id).val(text);
    }

しかし問題は、リンクされたブロックの正しい HTML ID を取得する方法がわからないことです。

どうすれば入手できますか?

4

2 に答える 2

1

ブロック モデルには Id プロパティが必要です。次に、ビューでその ID を参照できます。例えば:

class Block
{
    public Block LinkedBlock { get; set; }
    public int Id { get; set; }
}

ビューは強く型付けされている必要があります:

@model Models.Block

または、あなたが何をしているかに応じて、次のようになります。

@model Models.BlockCollection

次に、コードを次のように変更します (リンクされたブロックへの参照を追加するだけです)。

if (Model.LinkedBlock != null)
{
    var onChange = string.Format("setText({0}, this.text);", Model.LinkedBlock.Id);
    @Html.TextBoxFor(m => m.Text, new { onchange = onChange });
}

明らかに、すべてのlinkedBlocksがそれぞれのIDを持つページ上にあることを確認する必要があります.

それは役に立ちますか?

于 2013-04-11T19:38:13.820 に答える
1

次のように、リンクされたブロックをレンダリングするときに、必要な ID を HTML ヘルパーに追加するだけです。

@Html.TextBoxFor(m => m.Text, new { id = blockId });

IDblockIdレコードがデータベースにあるとします。onChange後で、ハンドラー呼び出しを作成するときに、この ID を参照できます。何かのようなもの:

var onChange = string.Format("setText({0}, this.text);", Model.LinkedBlock.ID);

より多くのコンテキストを提供していただければ、より多くのサンプル コードを提供できます。

于 2013-04-11T19:27:44.827 に答える