そのため、多くの人と同じように、古い(そして非常に大きな)WebフォームアプリケーションをMVC4アプリケーションに移行しようとしています。書き直しは困難である(そして現実的には実行不可能である)ため、アプリケーションをMVCアプリケーションでラップしようとしています。そしてそこから部分を書き直します。古いWebフォームコントロールをレンダリングする、かなり成功したHtmlHelper拡張機能があります。これは次のようになります。
public static MvcHtmlString RenderClassicControl(this HtmlHelper html, string controlPath)
{
var sb = new StringBuilder();
var stWriter = new StringWriter(sb);
var htmlWriter = new HtmlTextWriter(stWriter);
var page = new Page();
page.PreInit += ((s, e) =>
{
var form = new HtmlForm();
form.ID = "Form";
form.Attributes.Add("enctype", "multipart/form-data");
page.Controls.Add(form);
var control = page.LoadControl(controlPath);
form.Controls.Add(control);
page.Controls.Add(form);
});
HttpContext.Current.Server.Execute(page, htmlWriter, true);
return new MvcHtmlString(sb.ToString());
}
私が抱えている問題は、レンダリングされたhtmlが現在のサイトと同じように見えても、そのコントロールでアクションを完了しても何も起こらないことです。リクエストコレクションには、(__ EVENTTARGETのように)表示されると予想されるものがありますが、それらは空であり、isPostbackはfalseです。私はここで何かが足りないことを期待しており、誰かがいくつかのアイデアを持っていることを望んでいます。時間を割いていただきありがとうございます!
私はブライアンボールの提案を受け入れることになった。default.aspxとmasterpageを追加し、それを介してコントロールをロードするだけでした
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加