Я знаю, я знаю, это идет против зерна.Прежде чем все захотят читать лекции о модели MVC, это крайняя мера.У меня есть элемент управления ASP.NET, который я должен получить для работы в MVC, который требует ViewState и был бы признателен, чтобы сосредоточиться на этом.Я знаю, что могу загрузить классические страницы ASP.NET в MVC с помощью хитрости маршрутов , но мне нужно интегральное решение, которое вписывается в структуру MVC.
Должно бытьспособ расширить ViewUserControl, чтобы играть вместе с игрой ViewState, или фильтром или атрибутом, или даже насмехаться над объектом ViewState, анализируя запрос и каким-то образом переопределяя что-то в начале конвейера, чтобы вызвать LoadViewState.
Увы, боюсь, я недостаточно разбираюсь в классическом ASP.NET, чтобы знать, как это сделать.ViewUserControl имеет свойство ViewState, полученное из объекта UserControl вместе с методами SaveViewState и LoadViewState, поэтому я вижу некоторую надежду на это.
Вот что у меня есть:
<%@ Control Language="C#" CodeBehind="RadGridExample.ascx.cs" Inherits="MvcApplication5.Views.Shared.RadGridExample" %>
<form runat="server">
<telerik:RadScriptManager ID="scriptmanager2" runat="server"></telerik:RadScriptManager>
<telerik:RadGrid runat="server" ID="RadGrid1" AutoGenerateColumns="false" AllowMultiRowSelection="true" ShowGroupPanel="true">
<MasterTableView TableLayout="Fixed" >
<Columns>
<telerik:GridBoundColumn DataField="Name" HeaderText="Name" DataType="System.String" />
<telerik:GridBoundColumn DataField="Age" HeaderText="Age" DataType="System.String" />
</Columns>
</MasterTableView>
<ClientSettings AllowDragToGroup="true" >
</ClientSettings>
</telerik:RadGrid>
</form>
Код для частичного просмотра:
namespace MvcApplication5.Views.Shared
{
public class RadGridExample : ViewUserControl
{
protected void Page_Init()
{
HomeIndexViewModel viewModel = this.Model as HomeIndexViewModel;
RadGrid grid = this.Controls[0].FindControl("RadGrid1") as RadGrid;
grid.DataSource = viewModel.Animals;
grid.DataBind();
}
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
}
protected override object SaveViewState()
{
return base.SaveViewState();
}
}
}
Забавно, вызывается SaveViewState, но LoadViewState никогда не делает.