Преобразование .NET AJAX в MVC / Обучение - возможно ли достичь этой функциональности, не нарушая парадигму MVC? - PullRequest
0 голосов
/ 23 июня 2011

Я пытаюсь воспроизвести следующую функциональность в 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, затем toJSON объекта и передавать данные обратно в представление. Получив эти данные, я «ВЕРЮ», что я смогу каким-то образом воссоздать элемент так, чтобы я мог добавить его в 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");
    }
});

}

1 Ответ

1 голос
/ 23 июня 2011

У меня это работает для AJAX:

Я полагаю, вы имеете в виду aps.net ajax. И вы не можете использовать серверные элементы управления asp.net с mvc, потому что mvc просто не имеет никакой концепции ViewState, на которую серверные элементы управления asp.net в значительной степени полагаются. если вы хотите использовать такой элемент управления, у вас есть два варианта (о которых я могу подумать)

  • Реализуйте свой собственный элемент управления, совместимый с asp.net mvc
  • Или запустить asp.net и mvc бок о бок и использовать серверные элементы управления asp.net, где необходим
...