0

我正在使用 ASP.NET MVC 4,并在这样的视图中有一个准备好的 url:

var sectoionUrl = Url.Action("DisplayArticleSection", new { id = sectionId });

是否有任何助手使用准备好的sectionUrl呈现部分视图,而不是通过助手再次创建它:

@Html.Action("DisplayArticleSection", new { id = sectionId })

?

像这样的伪代码:

@Html.RenderUrl(sectionUrl)
4

2 回答 2

1

自定义 HtmlHelper:

public static class RenderUrlHelper
{
    public static void RenderUrl(this HtmlHelper helper, string originUrl)
    {
        var originRequest = helper.ViewContext.RequestContext.HttpContext.Request;

        if (!Uri.IsWellFormedUriString(originUrl, UriKind.Absolute))
        {
            originUrl = new Uri(originRequest.Url, originUrl).AbsoluteUri;
        }

        int queryIdx = originUrl.IndexOf('?');
        string queryString = null;
        string url = originUrl;

        if (queryIdx != -1)
        {
            url = originUrl.Substring(0, queryIdx);
            queryString = originUrl.Substring(queryIdx + 1);
        }

        // Extract the data and render the action.    
        var request = new HttpRequest(null, url, queryString);
        var response = new HttpResponse(new StringWriter());
        var httpContext = new HttpContext(request, response);
        var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
        var values = routeData.Values;
        string controllerName = values["controller"] as string;
        string actionName = values["action"] as string;
        var valuesCollection = HttpUtility.ParseQueryString(queryString);
        RouteValueDictionary routeValues = new RouteValueDictionary(valuesCollection.AllKeys.ToDictionary(k => k, k => (object)valuesCollection[k]));
        helper.RenderAction(actionName, controllerName, routeValues);
    }
}

一些测试自定义 HtmlHelper 的代码:

测试控制器:

public class TestController : Controller
{
    public ActionResult Index(string title, int number)
    {
        TestModel model = new TestModel { Title = title, Number = number };
        return PartialView(model);
    }
}

TestController 索引视图:

@model TestModel

<h1>Title: @Model.Title</h1>
<h2>Number: @Model.Number</h2>

测试模型:

public class TestModel
{
    public string Title { get; set; }
    public int Number { get; set; }
}

在任何视图中的用法:

@{
    var actionUrl = Url.Action("Index", "Test", new { number = 123, title = "Hello Url Renderer" });
    Html.RenderUrl(actionUrl);
}
于 2017-12-08T09:09:09.163 回答
-1

您可以使用以下 HTML 代码来渲染部分视图

@Html.RenderPartial("NameOfPartialView")
@Html.Partial("NameOfPartialView")

或者

您可以创建自定义 HTML Helper 来创建功能,例如,

@Html.RenderUrl(sectionUrl)

下面的 url 一步一步地展示了如何创建自定义 HTML 助手。

创建自定义 HTML 帮助程序

于 2013-10-04T09:26:51.347 回答