Javascript 如何使用ASP.NET MVC动态创建css/js/html文件并在运行时提供服务

Javascript 如何使用ASP.NET MVC动态创建css/js/html文件并在运行时提供服务,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,好的,完美的例子:tryIt编辑器(w3schools)、jsbin、jsfiddle。我希望用户在不同的文本区域键入css/js/html,点击一个神奇的按钮,然后poof,输出显示在iframe中 代码示例很受欢迎,但我更想知道如何进行,而不是确切的实现。例如,我可以轻松地将js/html/css作为字符串发送到服务器。然后动态地为它们创建文件。那又怎么样 我想让这些文件存在只是为了发布和获取。我不想重新制作一个JSFIDLE,我想快速向用户展示他们的输出,而不是保存它以备将来使用。所以我不

好的,完美的例子:tryIt编辑器(w3schools)、jsbin、jsfiddle。我希望用户在不同的文本区域键入css/js/html,点击一个神奇的按钮,然后poof,输出显示在iframe中

代码示例很受欢迎,但我更想知道如何进行,而不是确切的实现。例如,我可以轻松地将js/html/css作为字符串发送到服务器。然后动态地为它们创建文件。那又怎么样

我想让这些文件存在只是为了发布和获取。我不想重新制作一个JSFIDLE,我想快速向用户展示他们的输出,而不是保存它以备将来使用。所以我不希望这些文件保存到内存中。我希望他们发送给用户,如果他们刷新页面,那么它就消失了

  • 创建文件(并在每次更新时删除旧文件)是个好主意吗
  • 这一切都应该用javascript在客户端完成吗
  • 如果使用文件是正确的方法,我如何提供它们?我想在服务器上的临时文件夹中创建一个文件,然后发布链接,然后在300ms后发送一个删除请求,并使用唯一的ID+salt,如果临时文件仍然存在,则删除该文件。但这还远远不够理想,我可以马上想到一些问题

  • 从技术上讲,任何服务器端操作方法都可以返回任何类型的响应。因此,与其考虑文件,不如考虑响应类型。即:

    • 文本/html
    • 文本/css
    • 应用程序/javascript(或者可能是文本/javascript?)
    所以你至少需要三种行动方法。例如,按下“魔术按钮”可以重新加载一个框架(带有包含HTML/CSS/JS输入的POST请求),该框架:

    • 调用返回
      text/html
      的操作方法,该方法本身:
    • head
      节点中包含标准标记,这些标记引用CSS和JavaScript“文件”的路由(这些文件不是真正的文件,只是操作响应)
    从操作方法返回自定义响应的一种简便方法是使用
    ContentResult
    类型:

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

    例如,您的服务器端代码可以从客户端获取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
    

    为什么要重新发明车轮?因为我有理由需要一个车轮,我不想打破陈词滥调,也不需要同样质量的轮胎;)非常感谢,我一直在考虑你的反应。这似乎很明显,但如何处理客户端的响应?因此,如果我使用ajax调用这些方法,并且我得到了内容,我是否需要直接将其插入iframe?如果是这样,是否有必要将其发送到服务器。我真的不想强行翻页reload@user2330270:它不一定是重新加载页面,只是重新加载帧。在这种情况下,我不认为这是不合理的。当然,您可以尝试将所有内容保持在同一个DOM上,并纯粹使用AJAX,但我怀疑这会带来更多麻烦。例如,CSS可能应用于整个页面,而不仅仅是输出框架。(除非修改CSS选择器以输出框的子对象为目标,这听起来像是难看的字符串解析。)将输出保持在框架中听起来像是将其与页面其余部分隔离的一种简便方法。好吧,我想我的最后一个问题是如何将其呈现到框架中。我会问一个新问题:)
    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