设置Html的结果.对js字符串的偏置

本文关键字:字符串 js Html 结果 设置 | 更新日期: 2023-09-27 18:09:30

这是我想要完成的一个简化版本:

@{
    Thing t = new Thing(); // create an object
    IHtmlString TV = Html.Partial("ThingView", t); // get html based on that model
}
<script>
    $(function(){
        var tv = "@TV"; // hold the html in a js variable
    }
</script>

但是我得到一个javascript错误:

SyntaxError: unterminated string literal

var TV = "

我知道问题是Html。部分是用一堆空白生成html,它搞砸了javascript,但似乎应该有一种方式说@TV.NoWhiteSpace()或其他东西。

我已经搜索了一个解决方案,但我所看到的都是Regex解决方案,这似乎是一个草率的,可能是错误丛生的解决方案。

是否有更干净或更受欢迎的方法来做这件事?

设置Html的结果.对js字符串的偏置

我让JQuery来处理它:

首先,存储html的结果。部分隐藏div:

<div id="T1" style="display:none;">@T1</div>
然后,使用JQuery将div的内容保存到js变量:
var t1 = $("#T1").html();

注意:我只是张贴这个答案,因为我找不到一个更好的地方。我不会把它标记为答案,希望c#能够修复这个明显的疏忽,并且将来有人可以回答这个问题。

使用Html。ToJson:

var value = @(Html.ToJson(value));

在某些情况下我不得不使用JSON。也可以进行解析:

var value = JSON.Parse(@(Html.ToJson(value)));

这里有一篇文章可能会有所帮助:https://iterativo.wordpress.com/2013/04/04/converting-c-razor-models-into-javascript-objects/

尝试:

@{
    Thing t = new Thing();
    IHtmlString TV = Html.Partial("ThingView", t);
}
<script>
$(function(){
    var tv = `@TV`;
}
</script>

伙计们注意到你唯一需要做的就是把@TV变量用引号" ' ' "括起来

试着做:

var tv = "@Html.Raw(TV.ToHtmlString())";

首先调用Html。部分("ThingView"的事情);而不是Html。部分("ThingView",t);无论如何,我使用自定义扩展从视图获取html:

controllerContext.renderViewToString .

这个方法应该在项目中的某处声明:

public static class ViewHelper
{
    public static string RenderViewToString(this Controller controller, string viewName, object model)
    {
        using (var writer = new StringWriter())
        {
          var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
          controller.ViewData.Model = model;
          var viewCxt = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer);
          viewCxt.View.Render(viewCxt, writer);
          return writer.ToString();
        }
    }
}
使用上面的代码,你可以这样使用它:
@{
var html = Request.ControllerContext.renderViewToString("ThingView", new ThingView())
}
<script>
$(function(){
var t = "@html";
});
</script>