【发布时间】:2016-03-11 07:29:13
【问题描述】:
我是 .NET 的半新手,在做了很多测试之后 - 我决定来这里问一下。我试图让用户上传照片,然后将照片保存到特定路径。我在 MSDN 上发现了很多涉及使用带有变量的 <asp:~> 标记的东西 - 但我总是收到一个错误消息,说“asp.net 属性只允许在 asp.net 文件中” - 我正在工作在这个项目上为一个朋友尝试给他一些我在我的节点项目中拥有的功能。
我想要获得的效果的基本 Codepen 是 here @ Codepen
我知道 Codepen 由于安全原因将缺乏“保存”的能力 - 所以我正在尝试寻找 C# 替代方案。我最终使用的代码接近我的最终结果:
在控制器中
@{
WebImage photo = null;
var newFileName = "";
var imagePath = "";
if(IsPost){
photo = WebImage.GetImageFromRequest();
if(photo != null){
newFileName = Guid.NewGuid().ToString() + "_" +
Path.GetFileName(photo.FileName);
imagePath = @"images\" + newFileName;
photo.Save(@"~\" + imagePath);
}
}
}
在视图中
<form action="" method="post" enctype="multipart/form-data">
<fieldset>
<legend> Upload Image </legend>
<label for="Image">Image</label>
<input type="file" name="Image" />
<br/>
<input type="submit" value="Upload" />
</fieldset>
</form>
<h1>Uploaded Image</h1>
@if(imagePath != ""){
<div class="result">
<img src="@imagePath" alt="image" />
</div>
}
请注意,在视图中我删除了“@if”部分,直到它关闭 - 它似乎在 cshtml 中无法正确呈现。 [我假设 cshtml 和 ASP.NET 不太一样。]
如果有人可以提供指导,我将不胜感激。
功能只是 - 用户点击“上传”。选择文件。我用我指定的名称保存文件(将是基于之前提供的信息的变量)。
这个问题也可能存在于我放置的“控制器”中。我假设它进入了处理此页面功能的控制器。
代码当前发生的情况是图像是可选择的,并且它接受它 - 当我点击上传时,它只是刷新页面而没有任何反应。如果文件在某个地方,我不知道在哪里。
谢谢!
【问题讨论】:
-
带有 .cshtml 或 .vbhtml 扩展名的视图使用 Razor syntax,而以 .aspx 或 .asax 结尾的页面使用 WebForms - 两者都是 ASP.NET 的一部分。
-
谢谢蒂森!然后,我会将搜索重定向到 Razor 的详细信息。我不确定有什么区别。都是cshtml。
-
您使用的是什么项目模板?控制器通常是 C# 类,而不是视图页面(因此那里不应该有任何 Razor 标记),假设您使用的是 Visual Studio 并且它是项目模板。
-
这实际上是某人的 MVC - 我相信他们使用 MVC 3。视图是视图内的另一个文件。我将“控制器”代码放在它引用的控制器中。抱歉,如果我使用了错误的术语。
-
是的,我很抱歉,但我并不完全关注你。有一个路由引擎,它获取当前 URL 并对其进行解析,以找出需要哪个控制器类来处理请求,然后在控制器上执行哪个操作(控制器类的方法)。该操作返回某种结果,通常是对 View() 方法的调用,该方法会呈现在相应视图中找到的 Razor/WebForms(和 HTML)标记。
标签: c# css asp.net asp.net-mvc