現在、レンダリングに同じ Moustach HTML テンプレートを使用している同じページに、同じタイプのアイテムの 2 つのコレクションがあります。テンプレートにはRemove
ボタンが含まれています。
問題はRemove
、各コンテキストで何か異なることを実行する必要があることです (基本的に、現在どの div にあるかに基づいて)。
DataContract
2 つのテンプレートを使用することに抵抗があるのは、アイテムが常に 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
}
}
それとも、これを行うための簡潔な方法がありますか?