好的,完美的例子:tryIt Editor(w3schools),jsbin,jsfiddle。我希望用户在不同的textareas中键入css / js / html,点击魔术按钮和poof,输出显示在iframe中。
我们非常感谢代码示例,但在完成实际操作的答案之后,我会更多地回答它。例如,我可以轻松地将js / html / css作为字符串发送到服务器。然后为它们动态创建文件。但那又怎样?
我希望这些文件仅用于POST和&得到。我不想重拍一个jsfiddle,我想快速向用户显示他们有什么输出,而不是保存以供日后使用。所以我不希望这些文件保存到内存中。我希望它们发送给用户,如果他们刷新页面,那么它就消失了。
答案 0 :(得分:1)
任何服务器端操作方法在技术上都可以返回任何类型的响应。因此,不要考虑文件,而应考虑响应类型。即:
所以你需要至少三种动作方法。例如,按下“魔术按钮”可以重新加载一个框架(带有包含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