Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 返回部分的文本_Asp.net Mvc_Asp.net Mvc 3_Razor - Fatal编程技术网

Asp.net mvc 返回部分的文本

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

我的MVC应用程序的一部分包括一个wiki。除了标准的wiki格式之外,还有许多特殊的标记用于将数据呈现到模板中。解析这些标记时,它从存储库获取数据,实例化viewmodel并将其呈现为分部,然后将该分部插入标记中,替换原始标记。最终确定的标记本身作为DisplayFor的一部分呈现在具有相关UIHint的任何属性中

守则的有关部分如下:

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中写入