0

私はMVCで次の機能を複製しようとしていますが、AJAXで機能しています。

  • ユーザーはアイテムをページにドラッグアンドドロップします。
  • OnDroppedは、新しいコントロールが作成され、ページに添付されます。コントロールはタイプRadDockであり、タイプRadDockZoneのコントロールにドッキングされます。

古いコード:

    /// <summary>
    /// Creates the RadDock + Contents when dropping a graph onto the page.
    /// </summary>
    /// <param name="sender"> The RadListBox with an element being dropped from inside it. </param>
    /// <param name="e"> Information about the drop such as target and what is being dropped. </param>
    protected void RadListBox_Dropped(object sender, RadListBoxDroppedEventArgs e)
    {
        CormantRadDockZone dockZone = RadDockLayout1.RegisteredZones.OfType<CormantRadDockZone>().First(registeredDockZone => registeredDockZone.ID == e.HtmlElementID);

        if (!object.Equals(dockZone, null) && !dockZone.Docks.Any())
        {
            RadSlidingPane slidingPane = ((sender as RadListBox).Parent as RadSlidingPane);
            CormantReport report = new CormantReport(int.Parse(e.SourceDragItems[0].Value), e.SourceDragItems[0].Text, slidingPane.Title);
            CormantRadDock dock = new CormantRadDock(report);
            dock.CreateContent();
            dock.Dock(dockZone);
        }
    }

今、私はMVCでこのようなことを行う方法に頭を悩ませようとしています。私が考えていることは、ビューが必要なデータを取得し、そのデータをコントローラーに返す必要があるということです。コントローラはRadDockの作成を処理し、次にオブジェクトをJSONして、データをビューに戻します。そのデータを取得した後、RadDockZoneに追加できるように、何らかの方法で要素を再作成できるはずですが、Telerik.Web.UI.RadDock()コンストラクターはありません...かなり絶望的なようです?これは可能ですか?

function OnClientDropped(sender, eventArgs) {
//Capture e.HTMLElementID, e.SourceDragItems[0].Value, e.SourceDragItems[0].Text, and slidingPane.Title here

var droppedID = eventArgs.get_htmlElement().id;

if( droppedID.indexOf("RadDockZone") != -1 )
{
    var radDockZone = $find(droppedID);
    //This constructor does not exist!
    var radDock = new Telerik.Web.UI.RadDock();
    radDock.dock(radDockZone);
}
else
{
    alert("Failed to find RadDockZone on dropped target.");
}

var slidingPaneTitle = "";

if (sender.get_id().indexOf("lstBxHistorical") != -1) {
    slidingPaneTitle = "Historical Widgets";
}
else if (sender.get_id().indexOf("lstBxCustom") != -1) {
    slidingPaneTitle = "Custom Widgets";
}
else {
    alert(sender.get_id());
}

$.ajax({
    type: 'POST',
    url: 'ReportDropped',
    dataType: 'json',
    data: {
        //e.HTMLElementID, e.SourceDragItems[0].Value, etc...
    },
    success: function (data) {

        alert("Success");
    },
    errror: function (xhr, ajaxOptions, error) {
        alert("Error");
    }
});

}

4

1 に答える 1

1

私はそれをAJAXで動作させています:

私はあなたがaps.netajaxを意味すると信じています。また、mvcにはasp.netサーバーコントロールが大きく依存するViewStateの概念がないため、mvcでasp.netのサーバーコントロールを使用することはできません。このようなコントロールを使用したい場合は、2つのオプションがあります(私が考えることができます)

于 2011-06-23T19:19:42.280 に答える