0

現在、レンダリングに同じ Moustach HTML テンプレートを使用している同じページに、同じタイプのアイテムの 2 つのコレクションがあります。テンプレートにはRemoveボタンが含まれています。

問題はRemove、各コンテキストで何か異なることを実行する必要があることです (基本的に、現在どの div にあるかに基づいて)。

DataContract2 つのテンプレートを使用することに抵抗があるのは、アイテムが常に UI で一貫して表示されるように、オブジェクトとテンプレート間の 1 対 1 の関係に固執しようとしているからです。

フォームは ajax 経由で送信されます。

これを処理するための最良のオプションは何ですか?

別のテンプレートを作成しますか (本当にこれを避けたいですか)? 各ボタンにクラス名を追加しますか?

編集:

このクラスを考えると:

public class MyDataContract()
{
    public int Id { get; set; }
    public string MyString { get; set; }
}

Using this template:

<form id={{Id}} action="/dragsource/action/">
    <p>{{MyString}}</p>
    <input type="button" name='command' value='Remove' />
    <input type="button" name='command' value='Save' />
</form>

の 2 つの異なるリストをロードしますMyDataContract

このページには 2 つ<divs>ありますが、議論のためにそれらdragsourceを と と呼びますdroptarget

フォーム内のボタンは、それが含まれる div に基づいて 2 つの異なることを実行する必要があります。

テンプレートのデフォルト アクションが次のような場合:

action='/dragsource/action/'

ドロップハンドラー内のドロップされたフォームアクションを次のように変更できると考えています:

drop: function(event, ui) {
    $(ui.draggable).parent().attr('action', '/controllername/droptarget/')
    $(ui.draggable).appendTo(this);
}

次に、MVC アクション メソッドは次のようになります。

public ActionResult Droptarget(MyDataContract myDataContract, string command)
{
    if(command = "Remove")
    {
        // Do stuff
    }
    else
    {
        // Do stuff
    }
}

それとも、これを行うための簡潔な方法がありますか?

4

1 に答える 1

0

親のアクションを各コンテキストにバインドできます...問題について詳しく説明できますか? またはコード例を追加しますか?

編集:

コントローラーに別のアクションを作成できると思います.1つはDroptargetRemoveに、もう1つはDroptargetSaveにアクションをajaxで呼び出します。

フォームを使用して送信している場合は、フォームのアクションを変更するか、2 つのフォームを作成できます。

于 2013-08-18T19:32:23.647 に答える