MVC返回Json结果

时间:2011-02-04 09:21:11

标签: asp.net-mvc json asp.net-mvc-3 file-upload

我有一个上传文件的控制器。我想返回一个boson成功的json结果(如果成功上传,否则为false)和消息(这可能是出现的错误消息或链接到文件或链接到图像,具体取决于上传的内容)。

最好的方法是什么?

我有这个

public class UploadedFile
{
    public bool Success { get; set; }

    public string Message { get; set; }
}

然后在我的控制器中,我将Success设置为true /或/ false,将Message设置为<a href<img

我正走在正确的轨道上吗?

我将如何在视图中解析它,以便当图像显示图像时,如果链接显示链接,如果错误只是警告错误。 感谢

2 个答案:

答案 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
}