使用ASP.NET MVC时从WebForm访问HtmlHelpers

时间:2009-08-13 20:16:01

标签: asp.net asp.net-mvc webforms

我正在添加一个WebForm,我想从中解析到URL的路由。例如,在MVC中我只会使用

return RedirectToAction("Action", "Controller");

因此,如果您有办法从同一个应用程序中的WebForm访问相同的URL,我们将不胜感激。

3 个答案:

答案 0 :(得分:15)

在网络表单中尝试这样的事情:

<% var requestContext = new System.Web.Routing.RequestContext(
       new HttpContextWrapper(HttpContext.Current),
       new System.Web.Routing.RouteData());
   var urlHelper = new System.Web.Mvc.UrlHelper(requestContext); %>

<%= urlHelper.RouteUrl(new { controller = "Controller", action = "Action" }) %>

答案 1 :(得分:4)

以上代码的修订版本为PageCommon ...因为它目前正在中断。

public static class MvcPages{
public static UrlHelper GetUrlHelper(this System.Web.UI.Control c)
{
    var helper = new System.Web.Mvc.UrlHelper(c.Page.Request.RequestContext);
    return helper;
}

public static HtmlHelper GetHtmlHelper(this System.Web.UI.Control c)
{
    var httpContext = new HttpContextWrapper(HttpContext.Current);
    var controllerContext = new ControllerContext(httpContext, new RouteData(), new DummyController());
    var viewContext = new ViewContext(controllerContext, new WebFormView(controllerContext, "View"), new ViewDataDictionary(), new TempDataDictionary(), TextWriter.Null);

    var helper = new HtmlHelper(viewContext, new ViewDataBag());
    return helper;
} 

private class ViewDataBag : IViewDataContainer
{
    ViewDataDictionary vdd = new ViewDataDictionary();
    public ViewDataDictionary ViewData
    {
        get
        {
            return vdd;
        }
        set
        {
            vdd = value;
        }
    }
}

private class DummyController : Controller
{

}

}

答案 2 :(得分:0)

对于那些寻找实际HtmlHelper或更简洁的方式在页面中使用urlHelper的人:

public static class PageCommon
{
    public static System.Web.Mvc.UrlHelper GetUrlHelper(this System.Web.UI.Control c)
    {
        var helper = new System.Web.Mvc.UrlHelper(c.Page.Request.RequestContext);
        return helper;
    }
    class ViewDataBag : IViewDataContainer
    {
        ViewDataDictionary vdd = new ViewDataDictionary();
        public ViewDataDictionary ViewData
        {
            get
            {
                return vdd;
            }
            set
            {
                vdd = value;
            }
        }
    }
    public static System.Web.Mvc.HtmlHelper GetHtmlHelper(this System.Web.UI.Control c)
    {

        var v = new System.Web.Mvc.ViewContext();
        var helper = new System.Web.Mvc.HtmlHelper(v, new ViewDataBag());
        return helper;
    }
}