我有一个上传文件的控制器。我想返回一个boson成功的json结果(如果成功上传,否则为false)和消息(这可能是出现的错误消息或链接到文件或链接到图像,具体取决于上传的内容)。
最好的方法是什么?
我有这个
public class UploadedFile
{
public bool Success { get; set; }
public string Message { get; set; }
}
然后在我的控制器中,我将Success设置为true /或/ false,将Message设置为<a href
或<img
我将如何在视图中解析它,以便当图像显示图像时,如果链接显示链接,如果错误只是警告错误。 感谢
答案 0 :(得分:4)
你为什么要解析它?你不能提供更多关于你在Json回归的信息吗?
也许是这样的:
public class UploadedFile
{
public bool Success { get; set; }
public string Message { get; set; }
public Kind MessageKind { get; set; }
}
public enum Kind
{
Error,
File,
Image
}
根据MessageKind
,您只需使用正确的html即可显示结果。
答案 1 :(得分:4)
你走在正确的轨道上。我建议您使用jquery form plugin,这样您就可以AJAX化<form>
并处理成功案例。
示例:
型号:
public class UploadedFile
{
public bool Success { get; set; }
public string Url { get; set; }
public string Message { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel();
return View(model);
}
[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
{
var images = Server.MapPath("~/images");
var filename = Path.Combine(images, Path.GetFileName(file.FileName));
file.SaveAs(filename);
return View("UploadedFile", new UploadedFile
{
Success = true,
Url = Url.Content("~/images/" + Path.GetFileName(file.FileName))
});
}
return View("UploadedFile", new UploadedFile
{
Success = false,
Message = "Please upload a file"
});
}
}
查看:
<script src="@Url.Content("~/scripts/jquery.form.js")" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$('form').ajaxForm(function (result) {
$('#result').html(result);
});
});
</script>
@using (Html.BeginForm("index", "home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="file" />
<input type="submit" value="Save" />
}
<div id="result"></div>
和UploadedFile partial:
@model AppName.Models.UploadedFile
@{
Layout = null;
}
@if (Model.Success)
{
<img src="@Model.Url" alt="" />
} else {
@Model.Message
}