C# Webmatrix-根据参数动态创建文件以打开/触发外部程序

C# Webmatrix-根据参数动态创建文件以打开/触发外部程序,c#,asp.net,webmatrix,asp.net-webpages,C#,Asp.net,Webmatrix,Asp.net Webpages,在我开始挖掘之前,请您告诉我是否可以使用webmatrix和c#执行以下操作 目前,我有一个简单的html网站,其中包含许多,您当然可以使用网页动态生成一系列链接。一种方法是使用数据库或XML并以结构化格式存储变化的内容。然后,您可以查询存储并循环内容,并在运行时输出链接: foreach(var item in result){ <a href="search/@item.Filename" title="@item.SearchParameter">@item.Text&

在我开始挖掘之前,请您告诉我是否可以使用webmatrix和c#执行以下操作


目前,我有一个简单的html网站,其中包含许多
,您当然可以使用网页动态生成一系列链接。一种方法是使用数据库或XML并以结构化格式存储变化的内容。然后,您可以查询存储并循环内容,并在运行时输出链接:

foreach(var item in result){
    <a href="search/@item.Filename" title="@item.SearchParameter">@item.Text</a>
}
foreach(结果中的变量项){
}
本例假设Filename、SearchParameter和Text是可能因链接而异的元素


有关在ASP.NET网页中管理数据的基础知识的更多信息,请阅读本教程:

也许您对如何在C#中实际写入文件有兴趣

然后,如果您确实希望使用服务器上的默认关联程序执行它(服务器将是运行它的机器),请使用:

然而,我怀疑这是否真的是你想要的。我听说你可以“上传一个文件到浏览器”(我不确定我读的时候它的措辞是否正确,但是…),但我不确定你是否可以做到这一点,如何做到这一点,或者这方面有什么好的文档

我意识到这可能不会完全解决你的问题,但我很乐意在这个答案后面加上更多的内容,因为你会告诉我任何其他可能让你挂断电话的事情

------------更新信息-----------------


为了使用浏览器的下载管理器来管理您的文件,您需要做的就是以常规的

路径指向所述文件。您是在说“网页”、“web表单”还是“MVC”?不过,老实说,如果我正确理解了你的问题,那么在任何一种环境中,你都应该能够做到你所要求的。我可能能帮上很多忙,但可能不是所有的。我知道C#能够动态生成文件,但我以前从未生成过快捷方式文件(我理解正确吗)?我可以告诉你这一点,尽管
文件快捷方式(也称为shell链接)是在Windows95中引入的。Microsoft Windows使用.lnk作为本地文件快捷方式的文件扩展名,使用.URL作为远程文件(如网页)快捷方式的文件扩展名。
现在,您将如何编辑这样的文件是另一回事,但我恐怕在这一点上不知所措……啊,请原谅,我没有看到您的
asp.net网页
标记。很抱歉。我确实对网页有一些经验(与其他两个选项相反)。当然,我可以在这里提供一些帮助(除非你自己做了很多C#网),但你的问题应该缩小范围。开始尝试这一点,当你用尽所有其他选择来寻找解决方案时,一路提问。是的,需要一个网页解决方案。我刚刚开始使用webmatrix使用asp.net,因此我肯定需要一些帮助才能完成整个过程。使用jquery,我可以像这样获得单击的标题属性:
$(document).ready(function(){$(.testClick”).click(function(){alert($(this.attr)(“title”);})HTML:
但我如何在网页中使用它?我知道元素之间的循环-我正在寻找的是一种在单击链接后创建上述文件结构的方法,该链接将触发外部程序。我猜我需要javascript来实现这个功能,再加上一个c#函数。c#在web服务器上执行。如果你想在客户端创建文件,你只能在IE中使用ActiveX来创建。我不介意在服务器上创建文件,只要它能触发外部程序。它本来就是一个临时文件。为了澄清我的想法,我认为这个过程应该如何运作:用户点击链接->文件在bkg中创建->相同的文件在浏览器中打开->外部程序正在运行started@TonyClifton这个临时文件和外部程序之间有什么联系?我的意思是,如果我不明白,请原谅,但我不明白你为什么需要这个文件。是包含程序所需信息的txt文件,还是将其用作某种触发器?@VoidKing此带有外部程序扩展名的纯文本文件在程序内执行查询。因此,如果我拿上面这个文件的例子,用适当的扩展名保存它,我可以双击它,然后打开程序(它总是在bg中运行),在程序中,我会得到执行查询的结果列表。所以基本上这个文件+它的扩展名是触发程序执行查询的唯一方法。我认为,与其在服务器上管理这些文件,不如只在需要时创建它们。谢谢你的示例代码,但这不是我的问题。我的问题是创建并打开用户单击的文件。示例:如果单击指向pdf的链接,浏览器通常会打开一个带有“另存为…”或“打开方式…”的对话框。这就是我要找的。用户点击链接,文件被创建并通过浏览器弹出对话框打开。因此,我认为我必须获得用户交互(鼠标点击),并以某种方式让服务器启动上述过程。一定有办法做到这一点。@TonyClifton哦,我明白了。。。。那么,在这种情况下,是的,确实有一种方法可以做到这一点,而且你可能会让它变得更难。我会试着做点什么,并把它附加到我的答案中。那么,请澄清一下,您是想动态创建实际的“文件”,还是只需要编写指向文件的动态链接,或者两者都需要?@TonyClifton事实上,如果
标记中的
href
属性指向浏览器没有默认查看器的文件,那么我认为它会自动执行此操作。例如,尝试一个普通的
标记,该标记指向
search
searchtext_val=
doc_type=mySearchParameter
text=
cat=hardcoded
subcat=hardcoded
foreach(var item in result){
    <a href="search/@item.Filename" title="@item.SearchParameter">@item.Text</a>
}
List<String> lineList = new List<String>();
lineList.Add("search");
lineList.Add("searchtext_val=");
lineList.Add("doc_type=customSearchParameter");
lineList.Add("text=");
lineList.Add("cat=hardcoded");
lineList.Add("subcat=hardcoded");
System.IO.File.Delete(Server.MapPath("~/folderInRootOfSite/example.txt")); //This will delete the file if found (in case there is a lingering old version of this file still out there). This will not throw an error if the file is not there, but will delete it if it is.
var outputFile = System.IO.File.AppendText(Server.MapPath("~/folderInRootOfSite/example.txt"));
foreach(var lineVal in lineList)
{
    outputFile.WriteLine(lineVal);
}
outputFile.Close(); //This line is so necessary that if you forget to include it, the process will not close and will even prevent some access to the file and will even prevent its deletion (saying something to the effect of "this file is open in another program, etc., etc., etc.").
//Now the file is saved in "~/folderInRootOfSite/example.txt".
//This is where you would have to either utilize this file from the server or perhaps write an html page and utilize JavaScript on the client-side, however, I'm not sure what functionality, if any, you will be able to use from the client-side (especially without ActiveX).
//Once you are done with whatever, don't forget to delete the file if you want it cleaned up after this process.
System.IO.File.Delete(Server.MapPath("~/folderInRootOfSite/example.txt"));
string filePath = Server.MapPath("~/folderInRootOfSite/example.txt");
System.Diagnostics.Process.Start(filePath);
<a href="/fileDirectory/file.doc">Click here for file download!</a>
<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>