如何动态创建css / js / html文件并在运行时使用ASP.NET MVC进行回送

时间:2014-12-21 18:33:46

标签: javascript jquery asp.net-mvc

好的,完美的例子:tryIt Editor(w3schools),jsbin,jsfiddle。我希望用户在不同的textareas中键入css / js / html,点击魔术按钮和poof,输出显示在iframe中。

我们非常感谢代码示例,但在完成实际操作的答案之后,我会更多地回答它。例如,我可以轻松地将js / html / css作为字符串发送到服务器。然后为它们动态创建文件。但那又怎样?

我希望这些文件仅用于POST和&得到。我不想重拍一个jsfiddle,我想快速向用户显示他们有什么输出,而不是保存以供日后使用。所以我不希望这些文件保存到内存中。我希望它们发送给用户,如果他们刷新页面,那么它就消失了。

  1. 创建文件(并删除每个更新的旧文件)的想法是个好主意吗?
  2. 应该只在javascript中完成客户端吗?
  3. 如果使用文件是正确的方法,我该如何提供它们?我想在服务器上的temp文件夹中创建一个文件,然后POST链接,然后在300ms后发送一个带有唯一ID + salt的DELETE请求,如果它仍然存在,则删除临时文件。但这远非理想,我可以立即想到一些问题

1 个答案:

答案 0 :(得分:1)

任何服务器端操作方法在技术上都可以返回任何类型的响应。因此,不要考虑文件,而应考虑响应类型。即:

  • text / html的
  • 文本/ CSS
  • application / javascript(或者text / javascript?)

所以你需要至少三种动作方法。例如,按下“魔术按钮”可以重新加载一个框架(带有包含HTML / CSS / JS输入的POST请求):

  • 调用返回text/html的action方法,该方法本身:
  • head节点中包含标准标签,用于引用CSS和JavaScript“文件”的路由(不是真正的文件,只是操作响应)

从动作方法返回自定义响应的一种方便方法是使用ContentResult类型:

return Content(htmlText, "text/html");

或者:

return Content(cssText, "text/css");

因此,您的服务器端代码可以从客户端获取CSS文本,然后像这样回复它。 (注意各种攻击,例如XSS。这种简单的实现可能不太理想,但应该让你开始。)你真正需要在任何自定义文本中包含的唯一一个是HTML响应,你可以在那里静态定义HTML服务器端,并将用户输入的HTML放在body元素中。

所以只要大声思考,如果对frame / iframe的POST请求包含三个值,那么基本的HTML服务器端操作可能如下所示:

public GetHTML(string html, string css, string javascript)
{
    // temporarily store the css somewhere server-side
    // temporarily store the javascript somewhere server-side
    // build the html response from static dressing around the user-input html
    return Content(htmlString, "text/html");
}

CSS / JS存储在临时服务器端位置,可能使用会话状态或任何内置临时存储机制。在上述操作返回响应后,浏览器将从该响应中的标记请求CSS / JS操作,这些操作非常简单:

public GetCSS()
{
    // if the temporary location (session?) has a css value
    //   get that value
    // else
    //   get a default, likely empty value
    return Content(cssString, "text/css");
}

// repeat for the javascript content