Asp.net mvc 返回部分的文本
我的MVC应用程序的一部分包括一个wiki。除了标准的wiki格式之外,还有许多特殊的标记用于将数据呈现到模板中。解析这些标记时,它从存储库获取数据,实例化viewmodel并将其呈现为分部,然后将该分部插入标记中,替换原始标记。最终确定的标记本身作为DisplayFor的一部分呈现在具有相关UIHint的任何属性中 守则的有关部分如下:Asp.net mvc 返回部分的文本,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,我的MVC应用程序的一部分包括一个wiki。除了标准的wiki格式之外,还有许多特殊的标记用于将数据呈现到模板中。解析这些标记时,它从存储库获取数据,实例化viewmodel并将其呈现为分部,然后将该分部插入标记中,替换原始标记。最终确定的标记本身作为DisplayFor的一部分呈现在具有相关UIHint的任何属性中 守则的有关部分如下: private static void MatchSpecial(WikiHelper wh) { wh.match = Specia
private static void MatchSpecial(WikiHelper wh)
{
wh.match = SpecialTagRegex.Match(wh.sb.ToString());
while (wh.match.Success)
{
wh.sb.Remove(wh.match.Index, wh.match.Length);
string[] args = wh.match.Groups[2].Value.Split('|');
switch (wh.match.Groups[1].Value.ToUpperInvariant())
{
case "IMAGE":
string imageid;
imageid = args[0];
Image i = baserepo.imagerepo.GetImage(imageid);
ViewModels.ImageViewModel ivm = new ViewModels.ImageViewModel(i, args);
wh.sb.Insert(wh.match.Index, wh.Html.Partial("ImageViewModel",ivm));
break;
}
wh.match = SpecialTagRegex.Match(wh.sb.ToString(), ws.end);
}
}
WikiHelper
的相关成员包括:
wh.sb - StringBuilder containing the markup
wh.html - the HtmlHelper from the main view
wh.match - holds the current regex matches
在MVC2中,这很好。我现在正在升级到MVC3和Razor ViewEngine。尽管Html.Partial应该返回部分的MvcHtmlString,但它返回的是一个空字符串,并将内容直接写入响应中,结果是所有类似模板化的元素都出现在Html文件的最顶端(甚至在我的布局文件中出现任何内容之前).鉴于您描述的症状,我怀疑您正在直接向自定义帮助程序中的某个响应流写入。因此,无论您在哪里输出响应,请确保替换:
htmlHelper.ViewContext.HttpContext.Response.Write("some string");
与:
直接写入响应流在WebForms视图引擎中起作用,因为它是传统WebForms的遗产,而传统WebForms就是这样工作的。在ASP.NET MVC中,尽管这是不正确的。它起作用了,但不正确。所有帮助程序都应该写入
ViewContext.Writer
。Razor将内容写入临时缓冲区,然后刷新到响应中。它使用由内而外的渲染。鉴于您描述的症状,我怀疑您是在自定义帮助程序中的某个位置直接写入响应流。因此,无论您在哪里输出响应,请确保替换:
htmlHelper.ViewContext.HttpContext.Response.Write("some string");
与:
直接写入响应流在WebForms视图引擎中起作用,因为它是传统WebForms的遗产,而传统WebForms就是这样工作的。在ASP.NET MVC中,尽管这是不正确的。它起作用了,但不正确。所有帮助程序都应该写入
ViewContext.Writer
。Razor将内容写入临时缓冲区,然后刷新到响应中。它使用由内而外的渲染。是的,我确实使用了响应。在displaytemplate中写入是的,我确实使用了响应。在displaytemplate中写入