我正在使用ASP.NET MVC 4,并且在这样的视图中有一个准备好的URL:
var sectoionUrl = Url.Action("DisplayArticleSection", new { id = sectionId });
是否有任何帮助者使用准备好的 sectionUrl 呈现部分视图,而不是通过帮助器再次创建它:
@Html.Action("DisplayArticleSection", new { id = sectionId })
像这样的伪代码:
@Html.RenderUrl(sectionUrl)
答案 0 :(得分: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的一些代码:
的TestController:
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>
TestModel:
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);
}
答案 1 :(得分:-1)
您可以使用以下HTML代码渲染部分视图使用
@Html.RenderPartial("NameOfPartialView")
@Html.Partial("NameOfPartialView")
OR
您可以创建自定义HTML帮助程序以创建功能,例如
@Html.RenderUrl(sectionUrl)
以下网址会逐步显示如何创建自定义HTML帮助程序。