javascript - Razor 模板到 javascript 字符串

标签 javascript asp.net-mvc templates asp.net-mvc-3 razor

好吧,我让这个成功了,但我不确定这是多么糟糕的黑客攻击。谁能告诉我我所做的是否正确,为什么?

我需要在我的 Razor 和 JavaScript 之间共享一个模板,这样一个人就可以在服务器端和另一个客户端使用它。所以,这就是我所做的:

Func<dynamic, HelperResult> sampleTemplate =
    @<span>Sample markup @item.Something</span>;

然后,我在我的 View 中使用了我的模板,如下所示:

for(int idxSample = 0; idxSample < Model.Number; idxSample++) {
    @sampleTemplate(new { Something = "" })
}

对于 javascript,我这样做了:

<script type="text/javascript">
    var someJsTemplate = "" +
        <r><[!CDATA[@sampleTemplate(new { Something = "" })]]></r>;
</script>

所以我以后可以在需要时附加 someJsTemplate。那么,判决书是什么?有没有人看到更好的方法?或者这样可以吗?

编辑:

现在我不能用这个了。虽然它在 FireFox 中运行良好,但 Chrome 不允许我的破解。有帮助吗?

最佳答案

在我看来,在服务器端代码中存储 HTML 是个坏主意。我个人会写一个 Controller :

public class TemplatesController: Controller
{
    [ChildActionOnly]
    public ActionResult Index(Item item)
    {
        return View("~/Views/Shared/EditorTemplates/Item.cshtml", item);
    }
}

和包含标记的部分(~/Views/Shared/EditorTemplates/Item.cshtml):

@model AppName.Models.Item
@{
    Layout = null;               
}
<span>Sample markup @Model.Something</span>

然后,如果我需要在强类型 View 中使用它,我会简单地使用一个编辑器模板:

@Html.EditorFor(x => x.Items)

在 javascript 中:

<script type="text/javascript">
    var someJsTemplate = '@HttpUtility.JavaScriptStringEncode(Html.Action("index", "templates", new { something = "abc" }).ToHtmlString())';
</script>

为了稍微简化这个 javascript 调用,您可以编写一个帮助程序:

public static class HtmlExtensions
{
    public static MvcHtmlString Template(this HtmlHelper htmlHelper, object item)
    {
        return MvcHtmlString.Create(
            HttpUtility.JavaScriptStringEncode(
                htmlHelper.Action("index", "templates", item).ToHtmlString()
            )
        );
    }
}

然后:

<script type="text/javascript">
    var someJsTemplate = '@Html.Template(new { something = "abc" })';
</script>

关于javascript - Razor 模板到 javascript 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4636000/

相关文章:

asp.net-mvc - 有哪些 ASP.NET MVC 约定?

asp.net-mvc - 在ASP.NET MVC中更改 Controller 名称约定

c# - 您使用什么适用于 C# 的 ReSharper 4+ 实时模板?

javascript - 防止窗口向下滚动

javascript - 使文件夹共享谷歌驱动器API v3?

c# - 参数字典包含参数的空条目

html - Liferay 7 Freemarker 模板。 staticUtil 已评估为 NULL 或缺失 - 尝试获取 JournalArticle 的类别

PHP 字段验证 - (2 个字符后跟 6 个数字)示例 : bp125489

javascript - 如何平滑移动相对定位的div填充其他div的间隙

c++ - 删除虚拟调用